Parallel processing Makefile:在转到下一个子目标之前,执行子目标中的所有语句

Parallel processing Makefile:在转到下一个子目标之前,执行子目标中的所有语句,parallel-processing,makefile,Parallel Processing,Makefile,我有以下生成文件: 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 我希

我有以下生成文件:

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
调用
makeall-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:| ab
意味着
a
b
必须在
all
之前完成,但你没有提到
a
b
之间的关系

如果要在
b
之前运行
a
,则必须声明:

b: a

因此,如果我想要一个目标
重建
,它将首先执行目标
清理
,然后执行
全部
,但不使
全部
依赖于
清理
,有没有办法做到这一点?@InnotKauker
重建:清理$(MAKE)所有的
都应该工作(通过递归调用)。Etan是正确的。递归是实现这一点的唯一方法。