并行make:将-j8设置为默认选项

时间:2012-05-12 22:32:31

标签: linux makefile build gnu-make parallel-builds

我可以使用-j参数为构建过程设置线程数。例如,我有4个核心+4虚拟。当我写道:make -j8时,速度会提高4倍。

是否可以将该值设置为默认值? (例如,在Linux Gentoo中,在配置文件中,可以设置此默认值。)

P.S。我有Arch Linux

3 个答案:

答案 0 :(得分:37)

您的问题不是关于线程,而是关于make执行的进程(作业)。

设置此方法的简单方法是,从控制台使用make时添加:

alias make="/usr/bin/make -j 8"

到您的.profile文件。

您也可以使用setenv MAKEFLAGS '-j 8',但MAKEFLAGS可以在某些情况下忽略此参数,因为保留所需数量的进程需要与递归make调用进行通信。令人高兴的是这种方法works with current versions of GNU Make

答案 1 :(得分:30)

setenv MAKEFLAGS '-j8'

希望这有帮助!

答案 2 :(得分:9)

以下是我的表现:

CORES ?= $(shell sysctl -n hw.ncpu || echo 1)

all:; @$(MAKE) _all -j$(CORES)
_all: install lint test
.PHONY: all _all
…

我基本上已经"别名"我的默认目标all为"私人" _all。确定核心数量的命令是特定于OSX的AFAIK,因此如果愿意的话,您可以将其改进为更多跨平台。由于?=赋值,我们可以在需要时使用和覆盖变量来覆盖它。

修改

您也可以从makefile本身附加到MAKEFLAGS,如下所示:

CPUS ?= $(shell sysctl -n hw.ncpu || echo 1)
MAKEFLAGS += --jobs=$(CPUS)
…