多线程制作

时间:2014-05-22 18:26:09

标签: 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 $< > $@

2 个答案:

答案 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"