2009-04-28 36 views
1

如何在nmake調用之間轉發宏?如何在nmake調用之間轉發宏?

比方說,我們有

--- 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 --- 

我試圖像使用一套和SETX命令,但在父母的Makefile變量設定的值不同的東西不是從內心它被調用的makefile文件可見。

回答

1

下面是從MSDN的信息關於calling nmake recursively

使用遞歸宏遞歸調用NMAKE。遞歸會話繼承命令行和環境變量宏以及Tools.ini信息。它們不會繼承makefile定義的推理規則或.SUFFIXES和.PRECIOUS規範。要將宏傳遞給遞歸NMAKE會話,請在遞歸調用之前使用SET設置環境變量,在遞歸調用的命令中定義宏或在Tools.ini中定義宏。

所以,你可以讓a.mak的樣子:

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

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

另外,還要注意使用set sommand把變量的環境中也能發揮作用,但nmake自動大寫環境變量名(即使是像「windir」這樣的怪異類型,由於某種原因它在系統中爲小寫),並區分大小寫,因此要使用環境變量,必須使用大寫變量。

From MSDN

繼承名稱轉換爲大寫。繼承預處理

所以,這裏是你的b.mak應該是什麼樣子,如果你要傳遞變量使用環境,而不是明確的命令行之前發生:

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

正因爲如此,標準化nmake宏名稱的所有大寫命名約定可能不是一個壞主意。

0

也許你應該考慮不要調用make遞歸,看文章Recursive Make Considered Harmful。您仍然可以擁有與您已有的makefile(由make包含)類似的模塊化文件,只是規則僅在一個頂級makefile中定義。