使 -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 可以正确与父品牌沟通。这在您要求作业控制时特别有用。
我的 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 可以正确与父品牌沟通。这在您要求作业控制时特别有用。