为什么只执行第一个先决条件?

为什么只执行第一个先决条件?

这是生成文件。

.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取决于target1target2,并且由于它是第一个目标,因此是默认目标;
  • target1设置NUM为 1(使用特定于目标的变量赋值);
  • target2设置NUM为 2;
  • target1两者target2都依赖于target;
  • target必须通过运行给定的命令来满足echo

使用这些定义运行make将产生以下结果:

  • all不满意,因为它是假的,并且需要target1target2
  • target1不满意,因为它是假的,并且需要targetNUM设置为1);
  • target不满意,因为它是假的,并且没有先决条件,所以make运行echo命令;
  • target2不满意,因为它是假的,但是target满意,因为它已经被处理过,所以什么也没有发生。

您不能将目标用作函数,就像您在这里尝试做的那样;一些 Make 实现确实支持功能,但你不需要:

target1 target2:
    @echo "this is target ${NUM}"

相关内容