39

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

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

ps 我有 Arch Linux

4

3 回答 3

42

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

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

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

到你的.profile文件。

您也可以使用setenv MAKEFLAGS '-j 8',但MAKEFLAGS在某些情况下可以忽略此参数,因为保持所需的进程数需要与递归make调用进行通信。令人高兴的是,这种方法适用于当前版本的 GNU Make

于 2012-05-12T22:41:04.250 回答
35
setenv MAKEFLAGS '-j8'

希望这可以帮助!

于 2012-05-12T22:36:46.147 回答
21

这是我的做法:

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

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

我基本上将我的默认目标“别名”all为“私人” _all。计算内核数量的命令是 OSX 特定的,AFAIK,所以如果你愿意的话,你可以将它改进为更加跨平台。由于?=分配,我们可以在需要时使用和环境变量覆盖它。

编辑:

您还可以MAKEFLAGS在 makefile 本身中附加到您的 from,如下所示:

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

编辑2:

您也可以使用以下内容,如果您希望它更加跨平台:

CPUS ?= $(shell (nproc --all || sysctl -n hw.ncpu) 2>/dev/null || echo 1)
于 2015-05-28T04:44:55.697 回答