J'ai donc makefile avec une dépendance cible comme ceci:Puis-je avoir plus d'un signe% dans une cible makefile?
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xml$(lang)))
et la cible targetName ressemble à ceci:
targetName%.xml%: MODEL\=% targetName.xml*
Mais il ne fonctionne pas. Je reçois cette erreur:
make[1]: *** No rule to make target `targetNameMYMODEL.xmlen', needed by `all'. Stop.
cependant d'appeler « tous » avec un langage codé en dur dans la cible de targetName comme cela fonctionne:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xmlen))
et appelant « tous » sans la langue dans tout ou targetName fonctionne bien aussi. Je pense que Makefile n'aime pas avoir deux signes de pourcentage dans le nom de la cible.
En outre, puisque j'ai en quelque sorte hérité de ce makefile, quelqu'un peut-il me dire ce que signifie ce MODEL \ =%? Il y a une autre cible qui ressemble à ceci: MODEL%: ;
mais je ne suis pas sûr de savoir ce que signifie \ =%.
Edit: Donc, pour clarifier davantage la base de cette Reponse:
J'ai une liste de, disons, 5 modèles et une liste de dire 5 langues, l'objectif est de générer 25 fichiers, un pour chaque combinaison des langues et des modèles.
targetName% .xml target à l'origine créer un fichier appelé targetName.xml mais maintenant j'en ai besoin pour construire quelque chose comme targetName.xml C'est pourquoi j'avais besoin des deux signes%.
Je parcours ces deux listes avec un foreach imbriqué comme indiqué ci-dessus, mais j'ai du mal à passer ces variables aux cibles. J'ai essayé d'exporter la variable de langue à partir de l'instruction foreach, j'ai essayé de placer le contenu du targetName% .xml dans une boucle for pour faire une boucle dans les langages là. Ce dernier ne fonctionne pas car il y a des commandes Makefile (comme eval par exemple) dans la partie 'do' de la boucle.