我可以使用-j
参数为构建过程设置线程数。例如,我有 4 个内核 +4 个虚拟内核。当我写:make -j8
速度增加了 4 倍。
是否可以将该值设置为默认值?(例如,在Linux Gentoo的配置文件中,可以设置这个默认值)。
附言我有 Arch Linux
你的问题不是关于线程,而是由make执行的进程(作业)。
从控制台使用 make 时,设置此值的简单方法是添加:
alias make="/usr/bin/make -j 8"
到您的.profile
文件。
您也可以使用 setenv MAKEFLAGS '-j 8'
,但在某些情况下MAKEFLAGS
可以忽略此参数,因为保持所需数量的进程需要与递归make
调用进行通信。令人高兴的是,这种方法适用于当前版本的GNU Make。
setenv MAKEFLAGS '-j8'
希望这有帮助!
以下是我的做法:
CORES ?= $(shell sysctl -n hw.ncpu || echo 1)
all:; @$(MAKE) _all -j$(CORES)
_all: install lint test
.PHONY: all _all
…
我基本上已经将默认目标all
"别名"为"私有"_all
。计算内核数量的命令是特定于OSX的,AFAIK,因此如果您愿意,可以对其进行改进以使其更加跨平台。由于?=
赋值,我们可以在需要时用 和 env 变量覆盖它。
编辑:
您还可以从生成文件本身中追加到MAKEFLAGS
,如下所示:
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)