-j
我可以使用参数设置构建过程的线程数。例如,我有 4 个核心 +4 个虚拟。我写make -j8
的时候:速度提高了4倍。
是否可以将该值设置为默认值?(例如,在 Linux Gentoo 中,在配置文件中,可以设置此默认值)。
ps 我有 Arch Linux
-j
我可以使用参数设置构建过程的线程数。例如,我有 4 个核心 +4 个虚拟。我写make -j8
的时候:速度提高了4倍。
是否可以将该值设置为默认值?(例如,在 Linux Gentoo 中,在配置文件中,可以设置此默认值)。
ps 我有 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,所以如果你愿意的话,你可以将它改进为更加跨平台。由于?=
分配,我们可以在需要时使用和环境变量覆盖它。
编辑:
您还可以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)