GOOGLE ADS

mardi 26 avril 2022

Est-il possible d'obtenir des cibles make to autocomplete créées avec 'addsuffix' ou 'addprefix' ?

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 allcible, 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 allpour 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

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...