下面是從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宏名稱的所有大寫命名約定可能不是一個壞主意。