使 -j 工作,但 -jN 不起作用

Make -j works but -jN is not working

本文关键字:-jN 不起作用 工作      更新时间:2023-10-16

My 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"给出这个错误消息?

谢谢!

请阅读 GNU make 中递归调用的文档。从本质上讲,您需要调用 $(MAKE)${MAKE} 而不是普通make,或者至少在配方中的行前面加上+,以便子品牌可以与父品牌正确通信。当您请求作业控制时,这特别有用。