linux makefile build gnu-make parallel-builds

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!