Makefile:始终解析特定于目标的变量

时间:2018-05-09 13:51:47

标签: bash shell makefile gnu-make

考虑以下Makefile

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

bar:
    echo "bar"

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

有可能吗?

如果没有,有办法解决这个问题吗?确保在运行make bar

时不会执行shell命令

1 个答案:

答案 0 :(得分:2)

您可以通过将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每次 {em>}将FOOVAR展开:=,而简单展开变量(即, gdcmscanner -t 10,10 -d . -p)它只会执行一次