该设置是一个包含以下内容的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
$
答案 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