2017-08-23 2 views
1

J'ai ce Makefile.Dans Makefile, ifeq semble voir une variable combinée à des commentaires suivant la valeur de consigne

HFLOAT = 1 # comment 
$(info $(HFLOAT)) 
ifeq ($(HFLOAT), 1) 
$(info HFLOAT is 1) 
endif 

Si je lance 'make', il me donne

[email protected]:~/test] make 
1 
make: *** No targets. Stop. 

Oh, le résultat ifeq (..) était un faux! donc "HFLOAT est 1" n'est pas imprimé.

Mais si je retire le # comment ci-dessus dans le Makefile, et ornière faire, je reçois

[email protected]:~/test] make 
1 
HFLOAT is 1 
make: *** No targets. Stop. 

La valeur HFLOAT imprimée $(info ..) correcte dans les deux cas, mais ifeq ($(HFLOAT), 1) semble prendre la # comment dans le cadre de $ (HFLOAT). Qu'est-ce qui ne va pas?

Répondre

4

De GNU make manuel:

... si vous ne voulez pas de caractères blancs à la fin de votre valeur de la variable , vous devez vous rappeler de ne pas mettre un commentaire au hasard sur la fin du ligne après quelques espaces ...

en raison de votre commentaire, la valeur de HFLOAT est 1 suivi d'un espace. Cela est dû au fait que la valeur affectée est tout à droite au signe =, les espaces principaux étant supprimés et jusqu'à # (exclus). Votre test ifeq échoue donc. Sans le commentaire et, plus important, sans l'espace de fin, la valeur de HFLOAT est 1 (juste un) et le test passe.

Notez que avec:

HFLOAT = 1 # comment 

la valeur de HFLOAT est 1 suivie deux espaces. Notez également que sans le commentaire les espaces de fin peuvent être difficiles à repérer mais toujours là. Avec (utilisez votre souris pour sélectionner la ligne et voir les espaces de fin):

HFLOAT = 1 

la valeur de HFLOAT est également 1 suivie deux espaces. Lors de l'utilisation comme conditionals ifeq il est souvent sage d'utiliser également strip pour supprimer les espaces avant et arrière:

ifeq ($(strip $(HFLOAT)),1) 
+0

Wow, Merci pour une explication très gentil! Je n'étais pas au courant de cette chose importante. –