Параллельное make: установите -j8 в качестве опции по умолчанию

Я могу установить количество потоков для процесса сборки, используя -j аргумент. Например у меня 4 ядра +4 виртуальных. Когда я пишу: make -j8 скорость увеличивается в 4 раза.

Можно ли установить это значение по умолчанию? (Например, в Linux Gentoo в файле конфигурации можно установить это значение по умолчанию).

PS У меня есть Arch Linux

3 ответа

Решение

Ваш вопрос не о потоках, а о процессах (заданиях), выполняемых 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 из самого make-файла, вот так:

CPUS ?= $(shell sysctl -n hw.ncpu || echo 1)
MAKEFLAGS += --jobs=$(CPUS)
…
Другие вопросы по тегам