将 Tcl 脚本中的值放入 make 运行中并非易事。最简单的方法可能是安排脚本生成该变量作为其唯一输出,因为您可以使用一种相当简单的方法:
在 Tcl 方面:
#!/usr/bin/env tclsh
set final_val "Test finished! No Failures"
puts $final_val
在 Make 方面(假设您已使所有内容都可执行):
FINAL_VAL := $(shell thescript.tcl)
当然,还有比这更多的复杂性,但这是可能可行的最简单的技术。
如果您在该脚本中生成大量输出,则可能需要对输出使用单独的后处理来获得所需的部分。这可能会变得非常复杂。这些情况通常最好转换为使用中间文件,可能使用递归生成,因为您真的不希望在处理生成文件的变量定义阶段完成重要的处理(因为当它出错时会引起真正的头痛,并让您陷入调试的痛苦世界)。
一种更复杂但对我来说效果很好的方法是让 Tcl 代码生成一些文件,可能是 outputinfo.mk,其中包含我想要的 make 变量定义。 (在 Tcl 方面,您只是写入文件。有很多方法可以做到这一点。)
然后,我会让主makefile有一个依赖规则说你生成outputinfo.mk你需要运行Tcl脚本,然后说makefile想要include那个outputinfo.mk:
outputinfo.mk:
thescript.tcl > outputinfo.mk
include outputinfo.mk
(为了论证,我在这里假设脚本使用puts将文件内容写入标准输出。)
这很好用,因为 make 知道由 include 引起的这种依赖关系并做正确的事情。