【问题标题】:Reading a TCL variable in a Makefile在 Makefile 中读取 TCL 变量
【发布时间】:2017-05-18 17:08:58
【问题描述】:

我正在尝试读取(并最终设置为 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

【问题讨论】:

    标签: makefile tcl


    【解决方案1】:

    将 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 引起的这种依赖关系并做正确的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      相关资源
      最近更新 更多