这是生成文件。
.PHONY: all target1 target2 target
all: target1 target2
target1: NUM = 1
target2: NUM = 2
target1 target2: target
target:
@echo "this is target ${NUM}"
输出是:
this is target 1
为什么只执行第一个先决条件?我猜这与变量有关。谢谢!
答案1
你的 Makefile 内容如下:
- 所有目标都是假的(IE它们与磁盘上的工件不对应);
all
取决于target1
和target2
,并且由于它是第一个目标,因此是默认目标;target1
设置NUM
为 1(使用特定于目标的变量赋值);target2
设置NUM
为 2;target1
两者target2
都依赖于target
;target
必须通过运行给定的命令来满足echo
。
使用这些定义运行make
将产生以下结果:
all
不满意,因为它是假的,并且需要target1
和target2
;target1
不满意,因为它是假的,并且需要target
(NUM
设置为1);target
不满意,因为它是假的,并且没有先决条件,所以make
运行echo
命令;target2
不满意,因为它是假的,但是target
满意,因为它已经被处理过,所以什么也没有发生。
您不能将目标用作函数,就像您在这里尝试做的那样;一些 Make 实现确实支持功能,但你不需要:
target1 target2:
@echo "this is target ${NUM}"