2009-04-28 10 views
1

Comment puis-je transférer des macros entre des appels nmake?Comment transférer des macros entre des appels nmake?

Disons que nous avons

--- a.mak --- 

some_variable = value 

all: 
    nmake -f b.mak 

--- END --- 

--- b.mak --- 

all: 
    @echo some_variable = WHAT TO PUT HERE TO GET VALUE OF some_variable? 

--- END --- 

je tentais des choses différentes comme l'utilisation de commandes set et setX mais la valeur de consigne variable dans le Makefile mère n'est pas visible dans makefiles être invoqué à partir à l'intérieur.

Répondre

1

est ici l'info de MSDN à propos calling nmake recursively:

Utiliser des macros récursives pour appeler NMAKE récursive. Les sessions récursives héritent des macros de ligne de commande et d'environnement et des informations Tools.ini. Ils n'héritent pas des règles d'inférence définies par le fichier makefile ou des règles .SUFFIXES et .PRECIOUS. Pour passer des macros à une session NMAKE récursive, définissez une variable d'environnement avec SET avant l'appel récursif, définissez une macro dans la commande pour l'appel récursif ou définissez une macro dans Tools.ini.

Ainsi, vous pouvez faire a.mak ressembler à:

# ---- a.mak ---- 
some_variable = value 

all: 
    nmake -f b.mak some_variable=$(some_variable) 
#--- END --- 

Notez également que l'utilisation du set Sommand pour mettre la variable dans l'environnement fonctionnera aussi bien, mais nmake capitalise automatiquement les noms des variables d'environnement (même pour les étranges comme "windir" qui est en minuscules dans le système pour une raison quelconque), et est sensible à la casse, donc pour utiliser la variable d'environnement, vous devez utiliser la variable en majuscules.

From MSDN:

noms hérités sont convertis en majuscules. L'héritage se produit avant prétraiter

Alors, voici ce que votre b.mak devrait ressembler si vous allez passer la variable en utilisant l'environnement au lieu de explicitement sur la ligne de commande:

#--- b.mak --- 
all: 
    @echo some_variable is: $(SOME_VARIABLE) 
#--- end --- 

À cause de cela, ce n'est probablement pas une mauvaise idée de standardiser une convention de nommage de toutes les majuscules pour les noms de macros nmake.

0

Vous devriez peut-être ne pas appeler make récursivement, voir l'article Recursive Make Considered Harmful. Vous pouvez toujours avoir des fichiers modulaires similaires aux makefiles que vous avez déjà (inclus par make), juste que les règles ne sont définies que dans un makefile de premier niveau.

Questions connexes