分享方式:


特殊的 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 mlml64 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 解譯為巨集調用的開頭。 使用巨集可能會導致非預期的行為。

另請參閱

巨集和 NMAKE