我的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;提供此错误消息?
谢谢!
答案 0 :(得分:2)
请阅读documentation以了解GNU make中的递归调用。基本上,您需要调用$(MAKE)
或${MAKE}
而不是普通make
或至少在配方中使用+
作为行的前缀,以便子品牌可以正确地与父母做的。当您要求控制工作时,这尤其有用。