我可以使用make -jN
我可以在 Makefile中指定多线程,以便命令行中的make
运行多个线程。这是我的makefile:
BIN_OBJS = $(wildcard *.bin)
HEX_OBJS = $(subst .bin,.hex,$(BIN_OBJS))
all: $(HEX_OBJS)
$(HEX_OBJS): %.hex: %.bin
python ../../tools/bin2h.py $< > $@
答案 0 :(得分:16)
首先,要明确,make不是多线程的。使用-j
只是告诉make同时运行多个命令(基本上是在后台)。
其次,不,不可能在makefile中启用多个作业。一般而言,您不希望这样做,因为其他系统将具有不同数量的核心,并且您选择的任何值在这些系统上都无法正常工作。
您不必编写多个makefile,但您可以使用:
BIN_OBJS = $(wildcard *.bin)
HEX_OBJS = $(subst .bin,.hex,$(BIN_OBJS))
.PHONY: all multi
multi:
$(MAKE) -j8 all
all: $(HEX_OBJS)
$(HEX_OBJS): %.hex: %.bin
python ../../tools/bin2h.py $< > $@
答案 1 :(得分:3)
如果发生make的文件系统是nfs共享,请小心使用-j。我看到奇怪的结果,并且它向我提到nfs安装的目录操作不同(某种文件锁定问题?)
我从脚本中运行了多个make,并检查了cpuinfo以找出构建盒有多少处理器(针对多个架构/构建机器运行相同的脚本)
CPUCOUNT=$(grep -c "^processor" /proc/cpuinfo)
if [ ${CPUCOUNT} -lt 1 -o ${CPUCOUNT} -gt 4 ]
then
echo "Unexpected value for number of cpus, ${CPUCOUNT}, exiting ..."
exit 16
fi
echo "This machine has ${CPUCOUNT} cpus, will use make -j${CPUCOUNT} where possible"