make -j有效但-jN不起作用

时间:2016-01-24 12:02:57

标签: c++ makefile gnu

我的Makefile如下所示:

test:
    make clean
    make test2
test2: CXX=g++
test2: all

CPP_FILES := $(wildcard tmp/*.cpp)
OBJ := $(CPP_FILES:.cpp=.o)

all: ${OBJ}
    ${CXX} ${OBJ} ${LIB_PATH} ${LIBS} ${CXX_FLAGS} -o output.exe

%.o: %.cpp
    ${CXX} ${CXX_FLAGS} ${INCLUDE_PATH} -c $< -o $@

所有.o文件都可以(并且应该)并行构建。如果我执行&#34; make -j&#34;这是有效的。但如果我通过&#34; make -j4&#34;将进程数量限制为某个固定数量(例如4),则会失败。这将产生以下消息:

make[1]: warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.

有人可以指出我的错误吗?为什么&#34; make -j&#34;在&#34; make -j4&#34;提供此错误消息?

谢谢!

1 个答案:

答案 0 :(得分:2)

请阅读documentation以了解GNU make中的递归调用。基本上,您需要调用$(MAKE)${MAKE}而不是普通make或至少在配方中使用+作为行的前缀,以便子品牌可以正确地与父母做的。当您要求控制工作时,这尤其有用。