Makefile:在进入下一个子目标之前执行子目标中的所有语句

Makefile: execute all statements in a subtarget before going to the next subtarget

我有以下生成文件:

b:
    sleep 2 && echo b1
    sleep 2 && echo b2
    sleep 2 && echo b3

a:
    sleep 2 && echo a1
    sleep 2 && echo a2
    sleep 2 && echo a3

all: | a b
    sleep 2 && echo all

我希望在并行构建中按顺序执行子目标 a 和 b,并在它们之前添加 |。但不是像

这样的东西
sleep 2 && echo a1
a1
sleep 2 && echo a2
a2
sleep 2 && echo a3
a3
sleep 2 && echo b1
b1
sleep 2 && echo b2
b2
sleep 2 && echo b3
b3
sleep 2 && echo all
all

调用 make all -j3 后,我得到

sleep 2 && echo a1
sleep 2 && echo b1
a1
b1
sleep 2 && echo a2
sleep 2 && echo b2
a2
b2
sleep 2 && echo a3
sleep 2 && echo b3
b3
a3
sleep 2 && echo all
all

有没有办法在不将所有命令都放在每个目标中的情况下强制执行我预期的行为是一个单独的脚本?我的意思是,all 的所有子目标都将按顺序执行,但它们的子目标可以并行执行。

all : | a b 意味着 ab 都必须在 all 之前完成,但是你没有说 ab ] 相对于 彼此

如果你想在b之前运行a,那么你必须声明:

b: a