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

时间:2015-02-12 20:48:24

标签: parallel-processing makefile

我有以下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

我希望子目标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的所有子目标都会按顺序执行,但它们的子目标可以并行完成。

1 个答案:

答案 0 :(得分:2)

all : | a b表示ab都必须在all之前完成,但您对ab一无所知与彼此的关系

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

b: a