2011-02-04 7 views
0

Je ne parviens pas à faire avec quelques variables je quelque chose comme ceci:développer une variable sur l'évaluation non affectation

SUFFIX := raw 

FILENAME = name.$(SUFFIX) 

... 
... 

#much later, in a different makefile far away: 
SUFFIX := img 

echo $(FILENAME) 

Mais FILENAME a la valeur suffixe brute d'origine (name.raw), pas le plus récemment assignée "img" valeur.

Ai-je manqué quelque chose de simple ici? Utilisant le dernier gmake libéré.

+0

Comment les deux makefiles sont-ils connectés? Est-ce que l'un inclut l'autre, ou appelle l'autre, ou y en a-t-il un troisième, ou quoi? – Beta

+0

Beta: Je crois qu'il y a une série d'inclus. – user318904

+0

Les recettes shell sont stockées sous forme de variables récursives. Ainsi 'echo $ (FILENAME)' donnera '$ FILENAME' comme c'est le cas au moment où la recette est exécutée. C'est un peu après que les makefiles ont été lus et analysés. – bobbogo

Répondre

0

Je ne peux pas reproduire cette erreur avec une série d'includes; il y a quelque chose d'autre impliqué. Je vous suggère d'essayer ce qui suit et nous dire les résultats:

@echo filename: $(FILENAME) 
@echo origin: $(origin FILENAME) 
@echo flavor: $(flavor FILENAME) 

EDIT:
D'accord, nous savons maintenant que FILENAME est définie simplement (à savoir avec :=) quelque part. Essayez donc de suivre la chaîne d'inclusion et découvrez où cela se produit. Voici une astuce: placez ces lignes dans un makefile qui vous intéresse

ifeq ($(flavor FILENAME),simple) 
    $(warning FILENAME is simply defined) 
endif 
+0

nom de fichier: nom.raw origine: fichier saveur: simple – user318904