Je sais que la marque récursive est réputée maléfique, etc. S'il vous plait, gardez-moi de toute façon.make récursif Q .: cible générique * après * autres cibles?
Nous gérons un projet relativement volumineux avec GNU make, qui utilise beaucoup make pour garder les fichiers individuels simples. Je voudrais ajouter une cible qui est exécutée après autres ciblés. Plus précisément, le problème est le suivant:
J'ai un Makefile comme ceci:
PROJ_SRC = a.cpp b.cpp
PROJ_LIB = ab
PROJ_SUBDIRS = x/ y/ z/
PROJ_EXAMPLES = example/
Je voudrais d'abord appeler faire dans le SUBDIRS x, y, z, puis construire la lib dans PWD lui-même , et seulement ensuite allez dans le sous-répertoire 'example' pour construire les exemples en utilisant cette lib.
Tout sauf le bit d'exemple fonctionne bien, mais je ne peux pas envelopper ma tête autour d'une solution propre pour ce dernier bit. Voici les choses que j'ai essayé:
# works ok for the target 'all', but nothing else
all: subdirs ... $(PROJ_OBJ) $(PROJ_LIB_FULL) ... $(PROJ_EXAMPLES)
# ugly, needs to be adde on all targets, and runs into examples
# repeatedly if multiple targets get invoked.
full_lib:: $(PROJ_LIB_FULL)
$(PROJ_LIB_FULL):: subdirs
$(CXX) ...
ifdef PROJ_EXAMPLES
$(MAKE) -C $(PROJ_EXAMPLES)
endif
# this does not make sense, as it builds the lib even on 'make clean' etc
$(PROJ_EXAMPLES):: full_lib
Une idée sur la façon de généraliser cela?
PS .: désolé si les extraits ci-dessus ne sont pas 100% propre syntaxe - ils sont juste censés illustrer le problème ...
Salut bêta, merci pour vos commentaires! En effet, je n'aime pas l'astuce pour la cible de nettoyage - il y a trop de cibles que je devrais polluer comme ça. Mais je pense que vous avez raison: avoir la lib comme dépendance pour le répertoire des exemples devrait faire l'affaire, et est probablement la solution la plus propre. Merci beaucoup! :-) –
Hmm, en y réfléchissant bien plus: la dépendance seule n'aide pas à passer en 'exmaple' sur 'make clean'. Nous revenons donc à la case départ: il faut ajouter le 'make -C' à toutes les cibles fausses (clean, distclean, ...)? –
Hey, merci encore pour votre réponse! :-) Oui, c'est essentiellement comment nous gérons la récursivité en ce moment, ça marche bien. J'aime ton "squeakyclean" BTW ;-) –