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

How to build specific multiple targets parallelly using make?

共有三个源文件。每个源文件都是对应的目标。比如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。 我只想并行构建 ab

我尝试了以下方法。

make a&
make b&
wait

然而,wait的return代码是最后完成的等待目标。这意味着如果 make a& 以失败告终,然后 make b& 成功完成,则 wait 的 return 代码为 0。 如果任何 make 失败,我想停止构建过程。

有什么好的方法吗?

Unfortunately, it works sequentially

这不是真的,正如您通过编写一个小测试所看到的那样:

$ 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 与您在问题中描述的内容有很大不同。