在一个构建规则中定义变量,并在其他构建规则中使用它

时间:2018-12-18 13:24:28

标签: makefile

该设置是一个包含以下内容的Makefile(受答案https://stackoverflow.com/a/20714468/185475的启发):

prerule: VALUE = Hello
prerule: 
    @echo "in prerule"
    @echo ${VALUE}

record: prerule
    @echo "in record"
    @echo ${VALUE}

我想在一个规则中定义一个变量,该变量用作其他规则(或实际一组规则)的先决条件。 使用当前设置,将生成以下输出:

$ make record 
in prerule
Hello
in record

$

我想要的输出如下:

$ make record 
in prerule
Hello
in record
Hello
$

1 个答案:

答案 0 :(得分:1)

您可以添加:

$(eval VALUE := $(VALUE))

prerule的配方,但是要注意,一旦执行VALUE配方,它将在全局设置prerule变量。不仅是针对record规则的上下文。

演示:

$ cat Makefile
prerule: VALUE = Hello
prerule: 
    @echo "VALUE = $(VALUE) in $@"
    $(eval VALUE := $(VALUE))

record: prerule
    @echo "VALUE = $(VALUE) in $@"

foobar: 
    @echo "VALUE = $(VALUE) in $@"
$ make foobar
VALUE =  in foobar
$ make foobar record
VALUE =  in foobar
VALUE = Hello in prerule
VALUE = Hello in record
$ make record foobar
VALUE = Hello in prerule
VALUE = Hello in foobar
VALUE = Hello in record