【问题标题】:Makefile: target-specific variables are always resolvedMakefile:特定于目标的变量总是被解析
【发布时间】:2018-05-09 13:51:47
【问题描述】:

考虑以下Makefile

foo: FOOVAR:=$(shell prog_to_execute_only_on_foo)
foo:
    echo "foo"

bar:
    echo "bar"

我希望能够在不解析 FOOVAR 的 shell 命令的情况下运行 make bar

有可能吗?

如果没有,有没有办法解决这个问题?确保运行make bar时不会执行shell命令?

【问题讨论】:

    标签: bash shell makefile gnu-make


    【解决方案1】:

    您可以通过将FOOVAR 定义为recursively expanded variable 而不是简单扩展的变量 来实现这一点(即,使用= 而不是:=):

    foo: FOOVAR = $(shell prog_to_execute_only_on_foo)
    foo:
        echo "foo"
    

    这样prog_to_execute_only_on_foo会在FOOVAR展开时执行。

    但是请注意,prog_to_execute_only_on_foo 将在 每次 FOOVAR 扩展时执行,而对于简单扩展变量(即:=)它只会被执行一次

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      相关资源
      最近更新 更多