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

shd*_*shd 3 linux makefile

我在Makefile中有5个标签:

all: label1 label2 label3 label4 last_label
Run Code Online (Sandbox Code Playgroud)

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

lai*_*dir 12

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

all: last_label

last_label: label1 label2 label3 label4
Run Code Online (Sandbox Code Playgroud)

如果不存在真正的依赖关系(即,如果您不想last_label在其他任何一个更改时重建),并且如果您正在使用GNU Make,则可以将这些指定为"仅限订单"依赖关系 - make将只是在last_label构建之前确保它们存在:

all: last_label

last_label: | label1 label2 label3 label4
Run Code Online (Sandbox Code Playgroud)


dev*_*ull 5

创建一个目标,指定可以并行执行的四个目标,并将last_label其包括在all目标中:

intermediate: label1 label2 label3 label4

all:
        $(MAKE) intermediate
        $(MAKE) last_label
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我认为“intermediate”目标应该位于“all”之后,否则它将成为默认目标。 (2认同)