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