如何在makefile中仅在特定目标上使用.NOTPARALLEL?

时间:2013-05-30 07:05:02

标签: linux makefile

我在Makefile中有5个标签:

all: label1 label2 label3 label4 last_label

我希望最后完成last_label,我想使用make -j。如果我使用.NOTPARALLEL,它会使所有人NOTPARALLEL,关于如何做到这一点的任何建议?

2 个答案:

答案 0 :(得分:12)

如果last_label需要最后运行的原因是它需要来自其他标签的数据,最好的方法是告诉make该依赖关系:

all: last_label

last_label: label1 label2 label3 label4

如果不存在真正的依赖关系(即,如果您不希望重建last_label,如果其中一个更改),并且您使用的是GNU Make,则可以将这些指定为“order - 只有“依赖 - make只会确保它们在构建last_label之前存在:

all: last_label

last_label: | label1 label2 label3 label4

答案 1 :(得分:5)

创建一个目标,指定可以并行执行的四个目标。在last_label目标中包含此all

intermediate: label1 label2 label3 label4

all:
        $(MAKE) intermediate
        $(MAKE) last_label

这将并行执行intermediate中指定的目标,但intermediatelast_label将被连续强制执行。

(请注意,$(MAKE)之前的前导空格是TAB个字符。)