特殊的 NMAKE 巨集
NMAKE 提供數個特殊巨集來代表各種檔名和命令。 其中一些巨集的用法是在預先定義的推斷規則中。 如同所有巨集,NMAKE 所提供的巨集會區分大小寫。
檔名巨集
檔名巨集是相依性中指定的預先 as 定義檔名(磁碟上不是完整檔名規格)。 叫用時,這些巨集不需要以括弧括住;只 $
as 指定顯示的 。
Macro | 意義 |
---|---|
$@ |
目前指定的目標完整名稱(路徑、基底名稱、延伸模組)。 as |
$$@ |
目前指定的目標完整名稱(路徑、基底名稱、延伸模組)。 as 只 as 對相依性中的相依性有效。 |
$* |
目前目標的路徑和基底名稱減去擴展名。 |
$** |
目前目標的所有相依專案。 |
$? |
具有晚於目前目標時間戳的所有相依專案。 |
$< |
具有比目前目標晚時間戳的相依檔案。 只有在推斷規則的命令中才有效。 |
若要指定預先定義檔名的一部分巨集,請附加巨集修飾詞,並將修改過的巨集括在括弧中。
修飾詞 | 產生的檔名部分 |
---|---|
D |
磁碟驅動器加號目錄 |
B |
基底名稱 |
F |
基底名稱加上擴展名 |
R |
磁碟驅動器加目錄加上基底名稱 |
遞迴巨集
使用遞歸巨集以遞歸方式呼叫 NMAKE。 遞歸會話會繼承命令行和環境變數巨集和 Tools.ini
資訊。 它們不會繼承makefile定義的推斷規則或 .SUFFIXES
和 .PRECIOUS
規格。 有三種方式可將巨集傳遞至遞歸 NMAKE 會話:
- 在遞迴呼叫之前,
SET
使用 命令設定環境變數。 - 在命令中定義遞迴呼叫的巨集。
- 或者,在 中
Tools.ini
定義巨集。
Macro | 定義 |
---|---|
MAKE |
原本用來叫用 NMAKE 的命令。$(MAKE) 巨集提供的完整路徑。nmake.exe |
MAKEDIR |
叫用 NMAKE 時的目前目錄。 |
MAKEFLAGS |
目前生效的選項。 使用 as/$(MAKEFLAGS) 。 /F 未包含此選項。 |
命令巨集和選項巨集
命令巨集已針對Microsoft產品預先定義。 Options 巨集代表這些產品的選項,且預設為未定義。 這兩者都用於預先定義的推斷規則中,而且可用於描述區塊或使用者定義推斷規則。 您可以重新定義命令巨集來表示部分或所有命令行,包括選項。 選項巨集會在未定義時產生 Null 字串。
工具 | 命令巨集 | 定義 as | 選項巨集 |
---|---|---|---|
巨集組譯工具 | AS |
ml 或 ml64 |
AFLAGS |
C 編譯器 | CC |
cl |
CFLAGS |
C++ 編譯器 | CPP |
cl |
CPPFLAGS |
C++ 編譯器 | CXX |
cl |
CXXFLAGS |
資源編譯器 | RC |
rc |
RFLAGS |
環境變數巨集
NMAKE 會針對會話開始前存在的環境變數繼承巨集定義。 如果已在操作系統環境中設定變數,則會提供 as NMAKE 巨集。 繼承的名稱會轉換成大寫。 繼承會在前置處理之前發生。 使用 /E 選項可讓繼承自環境變數的巨集覆寫 makefile 中具有相同名稱的任何巨集。
您可以在會話中重新定義環境變數巨集,而這會變更對應的環境變數。 您也可以使用 SET 命令來變更環境變數。 不過,使用SET命令變更會話中的環境變數並不會變更對應的巨集。
例如:
PATH=$(PATH);\nonesuch
all:
echo %%PATH%%
在此範例中,變更會變更 PATH
對應的環境變數 PATH
;它會附加 \nonesuch
至您的路徑。
如果環境變數是在makefile中定義 as 語法不正確的字串,則不會建立任何巨集,而且不會產生任何警告。 如果變數的值包含貨幣符號 ($),NMAKE 會將它 as 解譯為巨集調用的開頭。 使用巨集可能會導致非預期的行為。