Je sais que je le fais mal, mais je n'arrive pas à comprendre comment organiser ce makefile. Je définis mes fichiers source util, et utiliser certaines fonctions pour définir les fichiers .o d'eux ici:Dans un makefile, comment j'exécute une commande sur chaque nom de fichier dans une variable?
UTIL_SRC = utils/src/foo.cpp utils/src/bar.cpp utils/src/baz.cpp
UTIL_OBJS = $(patsubst utils/src/%.cpp,utils/obj/%.o,$(UTIL_SRC))
Ceci est la cible que j'utilise ces fichiers pour:
lib : lib/libutils.a
lib/libutils.a : $(UTIL_OBJS)
rm -f lib/libutils.a
ar -c -q lib/libutils.a $(UTIL_OBJS)
Puis, quand je aller à la règle pour compiler ces bébés, j'aimerais juste avoir une commande qui parcourrait chaque fichier UTIL_OBJS et chaque fichier UTIL_SRC. Au lieu de cela, j'ai recouru à cette monstruosité, qui va à l'encontre du but de les stocker dans des variables.
$(UTIL_OBJS) : $(UTIL_SRC)
g++ $(UTIL_FLAGS) utils/src/foo.cpp -o utils/obj/foo.o
g++ $(UTIL_FLAGS) utils/src/bar.cpp -o utils/obj/bar.o
g++ $(UTIL_FLAGS) utils/src/baz.cpp -o utils/obj/baz.o
Puis-je condenser ceci en une ligne? Comment? Merci, super!
En effet, les règles de modèle sont la voie à suivre. – Bernard
J'ai essayé juste la règle de modèle sans la commande et cela n'a pas fonctionné. Cependant, en définissant explicitement la commande travaillée. Est-ce que la règle de pattern cause make pour chercher utils/src /%. Cpp? – jergason
Non, il ne cherchera pas les fichiers .cpp, il regardera les utilitaires/obj /%. O les fichiers dont il a besoin, et cette règle va, donc ça va le faire depuis utils/src /%. Cpp. Cela fonctionne en quelque sorte à l'envers. Le déclencheur est la ligne 'myutil: $ (UTIL_OBJS)' où vous lui indiquez les fichiers .o que vous voulez. Et dans ce cas, tous sont dans utils/obj/ – falstro