En utilisant GNU Make bien sûr.
J'ai la configuration suivante:
Makefile
subdir1
--- Makefile
--- source1.c
--- binary1
subdir2
--- Makefile
--- source2.c
--- binary2
Les deux makefiles dans les sous-répertoires ont une cible d'exécution, qui exécute le binaire généré par lui-même. Le makefile racine contient la all
cible, qui exécute make -C subir1 && make -C subdir2
:
SUBDIRS = subdir1 subdir2
all:
@for DIR in $(SUBDIRS); do \
$(MAKE) -C $$DIR; \
done
clean:
@for DIR in $(SUBDIRS); do \
$(MAKE) -C $$DIR clean; \
done
$(SUBDIRS):
$(MAKE) -C $@
Le bit du bas me permet d'exécuter make all
pour un seul sous-répertoire. Je veux une cible similaire pour make run
, générée par $(SUBDIRS)
. j'ai essayé
run-$(SUBDIRS):
make -C $(subst run-,,$@) run
mais la cible se développe en run-subdir1 subdir2
, et n'ajoute pas le préfixe au deuxième élément dans$(SUBDIRS)
Si j'ajoute un nouveau var RUN_TARGETS = $(addprefix run-, $(SUBDIRS)
, cela fonctionne, mais make ne reconnaît pas les cibles pour l'auto-complétion. Existe-t-il une option permettant de faire savoir qu'il doit développer RUN_TARGETS ou toute autre méthode pour préfixer une liste d'éléments ?
Solution du problème
Vous pouvez utiliser une règle de modèle :
run-%:
$(MAKE) -C $* run
ou si vous préférez être plus explicite, une règle de modèle statique:
$(addprefix run-,$(SUBDIRS)): run-%:
$(MAKE) -C $* run
Aucun commentaire:
Enregistrer un commentaire