linux - Marca paralela: establece-j8 como la opción por defecto
makefile build (3)
Así es como lo hice:
CORES ?= $(shell sysctl -n hw.ncpu || echo 1)
all:; @$(MAKE) _all -j$(CORES)
_all: install lint test
.PHONY: all _all
…
Básicamente, he "aliasado" mi objetivo predeterminado a un _all
"privado". El comando para calcular el número de núcleos es específico de OSX, AFAIK, por lo que podría mejorarlo para que sea más multiplataforma si lo desea. Y debido a la asignación ?=
, Podemos anularla con y env variable si / cuando sea necesario.
EDITAR:
También puede adjuntar a su MAKEFLAGS
desde el propio makefile, así:
CPUS ?= $(shell sysctl -n hw.ncpu || echo 1)
MAKEFLAGS += --jobs=$(CPUS)
…
Puedo establecer el número de subprocesos para el proceso de construcción utilizando el argumento -j
. Por ejemplo, tengo 4 cores +4 virtuales. Cuando escribo: make -j8
la velocidad aumenta 4 veces.
¿Es posible establecer ese valor como predeterminado? (Por ejemplo, en Linux Gentoo, en el archivo de configuración, es posible establecer este valor predeterminado).
ps tengo arch linux
Su pregunta no es sobre hilos, sino procesos (trabajos) ejecutados por make.
La forma más simple de configurar esto cuando make se utiliza desde la consola es agregar:
alias make="/usr/bin/make -j 8"
a su archivo .profile
.
También puede usar setenv MAKEFLAGS ''-j 8''
, pero MAKEFLAGS
puede ignorar este parámetro en algunos escenarios, porque mantener la cantidad deseada de procesos requiere la comunicación con llamadas recursivas. Felizmente este método funciona con las versiones actuales de GNU Make .
setenv MAKEFLAGS ''-j8''
¡Espero que esto ayude!