首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取Makefile中的TCL变量

读取Makefile中的TCL变量
EN

Stack Overflow用户
提问于 2017-05-18 17:08:58
回答 1查看 1.3K关注 0票数 0

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

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

代码语言:javascript
运行
复制
Set final_val "Test finished! No Failures" 

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

代码语言:javascript
运行
复制
@file.tcl
@echo final_val >> $(out_file)

P.S.我在TCL 8.5上

EN

回答 1

Stack Overflow用户

发布于 2017-05-19 11:29:37

将Tcl脚本中的值导入make运行并不容易。最简单的方法可能是安排脚本生成该变量作为其唯一的输出,因为您随后可以使用一种相当简单的方法:

在Tcl方面:

代码语言:javascript
运行
复制
#!/usr/bin/env tclsh
set final_val "Test finished! No Failures"
puts $final_val

在Make方面(假设所有内容都是可执行的):

代码语言:javascript
运行
复制
FINAL_VAL := $(shell thescript.tcl)

当然,有可能比这复杂得多,但这是最简单的技术,可能会起作用。

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

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

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

代码语言:javascript
运行
复制
outputinfo.mk:
    thescript.tcl > outputinfo.mk

include outputinfo.mk

(为了便于讨论,我在这里假设脚本使用puts将文件内容写入stdout。)

这很好用,因为make知道由include引起的这种依赖,并且做正确的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44054010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档