Multi-threaded faire
Je peux multi-thread a faire avec make -jN
Puis-je dicter le multi-threading dans le Makefile pour que juste make
à partir de la ligne de commande exécute plusieurs threads. Voici mon makefile:
BIN_OBJS = $(wildcard *.bin)
HEX_OBJS = $(subst .bin,.hex,$(BIN_OBJS))
all: $(HEX_OBJS)
$(HEX_OBJS): %.hex: %.bin
python ../../tools/bin2h.py $< > $@
- Viens de réaliser que je pouvais faire
all: $(MAKE) -j8 make2
ou quelque chose comme ça, mais j'espère qu'il y est une meilleure option - Vous pouvez supprimer le fonctionnement en parallèle avec
.NOTPARALLEL:
comme un pseudo-cible. Je ne suis pas au courant d'un moyen de forcer le parallélisme autres que les options de ligne de commande (voir la section GNUmake
manuel).
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, pour être clair, est de ne pas multi-thread. À l'aide de
-j
dit juste de faire exécuter plusieurs commandes en même temps (dans le fond, essentiellement).Deuxième, non, il n'est pas possible d'activer plusieurs emplois de dans le makefile. Vous ne voulez pas le faire, en général, de toute façon, parce que les autres systèmes ont des nombres différents de cœurs et quelle que soit la valeur que vous choisissez ne fonctionne pas bien sur ces systèmes.
Vous n'avez pas à écrire de multiples makefiles, cependant, vous pouvez simplement utiliser:
MAX_PARALLEL = 8
et l'utilisation-j${MAX_PARALLEL}
de sorte que vous pouvez remplacer le parallélisme sur la ligne de commande quand vous le souhaitez.Être prudent en utilisant ce -j si le système de fichiers où le faire est déjà un partage nfs. J'ai vu des résultats bizarres et avait-elle m'a indiqué que nfs monté répertoires fonctionnent différemment (une sorte de fichier de verrouillage problème?)
J'ai couru mon multi fait à partir d'un script et vérifié cpuinfo pour trouver le nombre de processeurs de la génération de la boîte n'était en cours d'exécution même script sur plusieurs architectures/construire des machines)