如何使用 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
。
我只想并行构建 a
和 b
。
我尝试了以下方法。
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 与您在问题中描述的内容有很大不同。
共有三个源文件。每个源文件都是对应的目标。比如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
的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 与您在问题中描述的内容有很大不同。