使 -j 工作但 -jN 不工作

Make -j works but -jN is not working

我的 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 文件都可以(并且应该)并行构建。如果我执行 "make -j",这是有效的,但如果我通过 "make -j4" 将进程数限制为某个固定数量(比如 4),它就会失败。这将导致以下消息:

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

有人可以指出我的错误吗?为什么 "make -j" 正在工作,而 "make -j4" 给出此错误消息?

谢谢!

请阅读 documentation GNU make 中的递归调用。本质上,您需要调用 $(MAKE)${MAKE} 而不是普通的 make 或至少在食谱中的行前加上 + 以便 sub-make 可以正确与父品牌沟通。这在您要求作业控制时特别有用。