How to build specific multiple targets parallelly using make?

江枫思渺然 提交于 2021-01-29 10:07:47

问题


There are three source files. Each source files are corresponding targets. For example, the target of a.cpp is a, b.cpp is b, and c.cpp is c.

src/a.cpp
    b.cpp
    c.cpp
build/

I can build the targets parallelly using -j option.

For example,

cd build
make -j3

target a, b, and c build parallelly.

Is there any way to specify some of targets and parallel build ?

For example

make -j2 a b

Unfortunately, it works sequentially. First, build a and then build b. I want to build only a and b parallelly.

I tried the following approach.

make a&
make b&
wait

However, the return code of the wait is the last finished waiting target. That means if make a& finished with failure and then make b& successfully finished, the return code of wait is 0. I want to stop building process if any of make are failure.

Is there any good way ?


回答1:


Unfortunately, it works sequentially

That is not true, as you could see from writing a small test:

$ 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

As you can see even when providing specific targets on the command line, they are run in parallel. If you are not seeing this behavior then there's something about your makefiles that is materially different than what you've described in your question.



来源:https://stackoverflow.com/questions/64384409/how-to-build-specific-multiple-targets-parallelly-using-make

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!