读取生成文件中的 TCL 变量



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

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

Set final_val "Test finished! No Failures" 

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

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

附言我在 TCL 8.5 上

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

在 Tcl 方面:

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

在制作方面(假设你已经使所有内容都可执行):

FINAL_VAL := $(shell thescript.tcl)

当然,可能比这更复杂的事情,但这是可能奏效的最简单的技术。

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


一种更复杂但对我来说效果很好的方法是让 Tcl 代码生成一些文件,也许是outputinfo.mk,其中包含我想要的 make 变量定义。(在 Tcl 端,您只是写入文件。有很多方法可以做到这一点。

然后,我会让主 makefile 有一个依赖规则,说你生成outputinfo.mk你需要运行 Tcl 脚本,然后说 makefile 想要includeoutputinfo.mk

outputinfo.mk:
thescript.tcl > outputinfo.mk
include outputinfo.mk

(为了便于讨论,我在这里假设脚本将文件内容写入 stdout 并带有puts

这很有效,因为 make 知道由include引起的此类依赖关系并做正确的事情。

最新更新