La construction/compilation fréquente de librairies ou de projets via GNU make peut prendre beaucoup de temps. Pour accélérer ces compilations, on peut utiliser make -jN où N est le nombre de build parallèles. Par exemple:

make -j4

fera 4 compilations en parallèle.

Considérations matérielles

Evidemment, vous ne pouvez pas faire quelque chose comme:

make -j256

C’est la meilleure manière de voir votre ordinateur figé !!! Vous devez donc vérifier les informations matérielles de votre CPU. Combien de coeurs possédez vous (incluant le multi threading):

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)

Vous pouvez également utiliser dmidecode :

dmidecode -t processor | grep "Core Count"
Core Count: 8
Core Count: 8

ici vous avez deux processeurs (2 fois Core Count) avec 8 coeurs. Vous pouvez également utiliser la commande lspcu:

lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 23
Stepping:              7
CPU MHz:               1998.000
BogoMIPS:              4999.98
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              3072K
NUMA node0 CPU(s):     0-3

Considérations système

Une fois le nombre de coeurs déterminé, on doit avoir un système qui continue à  répondre durant la compilation. On utilise l’option -l de make -l [load], –load-average[=load] {Spécifie qu’aucun nouveau job (commande) doit àªtre lancé si d’autres jobs sont en cours d’exécution et que la chage moyenne est d’au moins le paramètre} load

Pour bénéficier d’une exploitation maximale des processeurs sans figer votre système, exportez la variable d’environnement MAKEFLAGS:

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
export MAKEFLAGS="-j$((NB_CORES+1)) -l${NB_CORES}"
make

Ou:

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
make -j$((NB_CORES+1)) -l${NB_CORES}

cela signifie que la charge moyenne ne dépasse pas le nombre de coeurs.

Configuration persistente

Pour garder cette configuration de manière persistente, ajouter dans votre.bashrc ou .bash_profile:

NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
export MAKEFLAGS="-j$((NB_CORES+1)) -l${NB_CORES}"

Un dernier exemple en ligne de commande

Si vous ne voulez pas opérer de configuration particulière:

make -j9 -l8

Remarque

Vous pouvez si le montant de votre RAM le permet doubler le nombre de jobs par rapport au nombre de CPU, notamment si votre CPU supporte l’hyper-threading. Typiquement, si vous avez 32 dual cores, vous pouvez lancer 128 jobs (32x2-coeursx2-hyperthreading). Merci à  Andrew Stormont pour sa contribution.