use*_*084 9 multithreading makefile
我可以用多线程制作 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 $< > $@
Run Code Online (Sandbox Code Playgroud)
Mad*_*ist 17
首先,要明确,make不是多线程的.使用-jjust告诉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 $< > $@
Run Code Online (Sandbox Code Playgroud)
小智 5
如果发生 make 的文件系统是 nfs 共享,请小心使用 -j。我看到了奇怪的结果,并且有人向我提到 nfs 安装目录的操作方式不同(某种文件锁定问题?)
我从一个脚本运行了我的多个版本,并检查了 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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22929 次 |
| 最近记录: |