在Makefile中读取TCL变量

时间:2017-05-18 17:08:59

标签: makefile tcl

我正在尝试读取(并最终设置为Make变量)TCL脚本中设置的变量的值,以便将其回显到文件。

(我知道我可以简单地将var放到文件中,但这是一个更复杂的流程,在Make中执行它会更容易。只是想知道这是否可行)

Set final_val "Test finished! No Failures" 

然后我想在调用脚本的Makefile中使用final_val(在TCL中设置)的值:

@file.tcl
@echo final_val >> $(out_file)

P.S。我在TCL 8.5

1 个答案:

答案 0 :(得分:0)

将Tcl脚本中的值转换为make运行并非易事。最简单的方法可能是安排脚本生成该变量作为其唯一的输出,因为您可以使用一个相当简单的方法:

在Tcl方面:

#!/usr/bin/env tclsh
set final_val "Test finished! No Failures"
puts $final_val

在Make方面(假设你已经使所有东西都可执行):

FINAL_VAL := $(shell thescript.tcl)

当然,除此之外还有更多的复杂性,但这是最简单的技术。

如果您在该脚本中生成大量输出,则可能需要使用单独的输出后处理来获取所需的部分。这可能变得非常复杂;这些情况通常最好转换为使用中间文件,可能还有递归制作,因为你真的不希望在处理makefile的变量定义阶段完成重要的处理(因为它在出错时会引起真正的麻烦,并通过调试让你陷入痛苦的世界。

一种更复杂但对我来说非常有效的方法是让Tcl代码生成一些文件,可能是outputinfo.mk,其中包含我想要的make变量定义。 (在Tcl方面,你只是只是写一个文件。有很多方法可以做到这一点。)

然后,我会让主makefile有一个依赖关系规则,说你生成outputinfo.mk你需要运行Tcl脚本,然后说makefile想要include那个{{ 1}}:

outputinfo.mk

(为了争论,我假设脚本将文件内容写入带有outputinfo.mk: thescript.tcl > outputinfo.mk include outputinfo.mk 的stdout。)

这很有效,因为make知道由puts引起的这种依赖,并做正确的事。