【问题标题】:Printing variable from within Makefile从 Makefile 中打印变量
【发布时间】:2014-03-13 18:41:39
【问题描述】:

我的 makefile 中有以下代码:

S_RES=$(shell cat output)

echo -e "Serial result = \t" $(S_RES)

基本上,我想将 shell 命令 cat output 的输出存储在 S_RES 变量中,然后将该变量回显到屏幕上(前面有一些解释性文本)。我还希望以后能够在我的程序中使用该变量。我以为我已按照各种 StackOverflow 问题中给出的说明进行操作,但它似乎不起作用。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    如果允许使用简单空格而不是转义序列 \t,并且您的 makeGNU make 3.81 或更高,$(info) 可用。
    例如:

    $(info Serial result = $(S_RES))
    

    如果您的make 的版本是3.80 或更低,$(warning) 可能会满足 目的。但是,warning 也会打印行号等。

    编辑: 供您参考,以下 makefile 在我的 GNU make 3.81 上输出 abc

    A := $(shell echo abc)
    $(info $(A))
    

    【讨论】:

    • 不幸的是,这似乎不起作用。我得到'Serial result ='打印出来,但不是S_RES的值。我假设我首先正确设置了 S_RES - 这是正确的吗?
    • 是你的makeGNU-make吗?如果有,版本是多少?请查看编辑。
    • 我得到以下输出: A := abc make: A: Command not found make: *** [test] Error 127 我的 make 版本是 GNU Make 3.81
    • @robintw:你有没有机会尝试在规则范围内这样做?
    • @robintw:当然。 Ise Wisteria 写的是“Make 语言”,但 Make 将规则中的 commands 传递给子shell,这些子shell 使用非常不同的语法。如果您尝试在那里设置一个变量并“稍后在 [the] 程序中”使用它,我怀疑您误解了 makefile 的工作方式以及“稍后”在该上下文中的含义。也许您可以编辑您的帖子以显示代码原位并告诉我们“程序”是什么。
    【解决方案2】:

    只是一个旁注

    这是对使用时间的评估,这是使用 $(A) 的次数

    A = something
    

    这会在解析时间进行评估,因此该值会评估一次

    A := something
    

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 2013-05-04
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多