Параллельный make: set -j8 как опция по умолчанию
Я могу задать количество потоков для процесса сборки, используя аргумент -j
. Например, у меня 4 ядра +4 виртуальных. Когда я пишу: make -j8
, скорость увеличивается 4 раза.
Можно ли установить это значение по умолчанию? (Например, в Linux Gentoo, в файле конфигурации, можно установить это значение по умолчанию).
p.s. У меня Arch Linux
Ответы
Ответ 1
Ваш вопрос касается не потоков, а процессов (заданий), выполняемых make.
Простой способ установить это, когда make используется с консоли, добавляется:
alias make="/usr/bin/make -j 8"
в ваш .profile
файл.
Вы также можете использовать setenv MAKEFLAGS '-j 8'
, но MAKEFLAGS
может игнорировать этот параметр в некоторых сценариях, потому что для поддержания необходимого количества процессов требуется связь с рекурсивными вызовами make
. К счастью, этот метод работает с текущими версиями GNU Make.
Ответ 2
setenv MAKEFLAGS '-j8'
Надеюсь, это поможет!
Ответ 3
Вот как я это сделал:
CORES ?= $(shell sysctl -n hw.ncpu || echo 1)
all:; @$(MAKE) _all -j$(CORES)
_all: install lint test
.PHONY: all _all
…
Я в основном "сшил" мою целевую цель по умолчанию all
до "private" _all
. Команда для определения количества ядер зависит от OSX, AFAIK, поэтому вы можете просто улучшить ее, чтобы быть более кросс-платформой, если хотите. И из-за назначения ?=
мы можем просто переопределить его с помощью переменной env, если/когда это необходимо.
EDIT:
Вы также можете добавить свой MAKEFLAGS
из самого файла makefile, например:
CPUS ?= $(shell sysctl -n hw.ncpu || echo 1)
MAKEFLAGS += --jobs=$(CPUS)
…