Makefile 如何使用make并行构建特定的多个目标?

Makefile 如何使用make并行构建特定的多个目标?,makefile,build,parallel-processing,target,Makefile,Build,Parallel Processing,Target,有三个源文件。每个源文件都是相应的目标。例如,a.cpp的目标是a,b.cpp是b,c.cpp是c src/a.cpp b.cpp c.cpp build/ 我可以使用-j选项并行构建目标 比如说, cd build make -j3 目标a、b和c并行构建 有没有办法指定一些目标和并行构建 比如说 make -j2 a b 不幸的是,它是按顺序工作的。首先,构建a,然后构建b。 我只想并行地构建a和b 我尝试了以下方法 make a& make b& wa

有三个源文件。每个源文件都是相应的目标。例如,a.cpp的目标是a,b.cpp是b,c.cpp是c

src/a.cpp
    b.cpp
    c.cpp
build/
我可以使用
-j
选项并行构建目标

比如说,

cd build
make -j3
目标a、b和c并行构建

有没有办法指定一些目标和并行构建

比如说

make -j2 a b
不幸的是,它是按顺序工作的。首先,构建
a
,然后构建
b
。 我只想并行地构建
a
b

我尝试了以下方法

make a&
make b&
wait
但是,
wait
的返回代码是最后一个完成的等待目标。这意味着如果
make a&
失败完成,然后
make b&
成功完成,则
wait
的返回代码为0。 我想停止建设过程中,如果任何一个使失败

有什么好办法吗

不幸的是,它是按顺序工作的

但事实并非如此,从编写一个小测试中可以看出:

$ cat Makefile
all: one two

one two:
        @echo start $@
        @sleep 2
        @echo stop $@

$ make
start one
stop one
start two
stop two

$ make -j2
start one
start two
stop one
stop two

$ make -j2 one two
start one
start two
stop one
stop two

正如您在命令行上提供特定目标时所看到的,它们是并行运行的。如果您没有看到这种行为,那么您的makefile与您在问题中所描述的有很大不同。

一般来说,上面的-j2或-j3这样的示例应该可以并行启动作业;是否存在连接这些目标的依赖项?发布Makefile可能会有所帮助谢谢你的回答。我走错了路。Makefile是在我报告的案例中由cmake生成的。我误解了
-j
选项可以防止多个目标。我仍然有我报告的问题。但现在,我明白了意外行为不是由make引起的,而是由cmake生成的Makefile引起的。我想我误用了关于cmake的一些东西。我会调查的。