我正在尝试读取(并最终设置为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
答案 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
引起的这种依赖,并做正确的事。