我正在尝试读取(并最终设置为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上
发布于 2017-05-19 11:29:37
将Tcl脚本中的值导入make运行并不容易。最简单的方法可能是安排脚本生成该变量作为其唯一的输出,因为您随后可以使用一种相当简单的方法:
在Tcl方面:
#!/usr/bin/env tclsh
set final_val "Test finished! No Failures"
puts $final_val
在Make方面(假设所有内容都是可执行的):
FINAL_VAL := $(shell thescript.tcl)
当然,有可能比这复杂得多,但这是最简单的技术,可能会起作用。
如果在该脚本中生成大量输出,则可能需要使用输出的单独后处理来获得所需的部分。这可能会变得非常复杂;这些情况通常更好地转换为使用中间文件,可能是使用递归的make,因为您并不希望在处理makefile的变量定义阶段完成大量的处理(因为当makefile出错时,它会引起真正的头痛,并使您陷入调试的痛苦之中)。
有一种方法更复杂,但对我来说效果很好,那就是让Tcl代码生成一些文件,比如outputinfo.mk
,其中包含我想要的make变量定义。(在Tcl方面,您只是在写入一个文件。有很多方法可以做到这一点。
然后,我会让主makefile有一个依赖规则,它说生成outputinfo.mk
需要运行Tcl脚本,然后说makefile想要include
那个outputinfo.mk
outputinfo.mk:
thescript.tcl > outputinfo.mk
include outputinfo.mk
(为了便于讨论,我在这里假设脚本使用puts
将文件内容写入stdout。)
这很好用,因为make知道由include
引起的这种依赖,并且做正确的事情。
https://stackoverflow.com/questions/44054010
复制相似问题