只需添加到傑克·凱利的建議,你可以做存在測試的CMD.EXE的外殼。 NMake還包括創建臨時.cmd文件並執行它的功能。
這裏是(n)的生成文件語法的例子,我使用了「檢查語法」的目標。它通過編譯來檢查多文件項目中單個C#源文件中的語法。
check-syntax :
<<flymake-build.cmd $(CS_SOURCE)
SETLOCAL ENABLEDELAYEDEXPANSION
set errorlevel=
for %%I in (%*) do if NOT x%%I == x$(FLYMAKE_ORIGINAL) (
set filesToBuild=!filesToBuild! %%I
)
$(_CSC) /t:module $(LIBSREF) $(FLYMAKE_CHECK) !filesToBuild!
ENDLOCAL && exit /b %errorlevel%
<<
「flymake-build.cmd」是創建的臨時cmd文件的名稱。雙尖括號(<<
)表示在執行文件之前進入臨時文件的內容的開始和結束。
之後的東西第一行的文件名是傳遞給.cmd文件的參數。在這個例子中,參數是一個名爲CS_SOURCE
的makefile變量的內容。在我的情況下,這只是項目中的文件名列表。 Makefile變量也將在臨時文件的文本內展開。你可以看到我指的是一個編譯器(_CSC
)和其他一些符號。
裏面的.CMD代碼,您可以循環做,if語句,你喜歡的東西。這是一個普通的.cmd文件。
如果您希望nmake響應.cmd文件中命令生成的錯誤(例如,終止構建),則需要使用exit /b
方法來結束cmd。
我發現在黑暗的角落裏爲這個文檔的某個地方,所以我想我會在這裏分享它一般澄清。 (編輯:here's the link。)
這是很整潔,並且遠遠超出我做了什麼回來時,我用批處理文件修修補補(我想巴特的ModBoot啓動盤很瘋狂)。也許你可以爲這些信息提出一個單獨的問題和答案?讓它消失在互聯網的另一個黑暗角落是件可恥的事情。 – 2010-12-26 04:23:09
嘿傑克。是的,我認爲這也是有用的。我已經在幾個stackoverflow答案中引用了此功能(例如:http://stackoverflow.com/questions/801778/2813575#2813575,http://stackoverflow.com/questions/3745261/4118794#4118794),其中之一是我自己的問題(http://stackoverflow.com/q/2806325/48082)。不過,這些問題並不是很受歡迎。如今,Nmake似乎正在走出MSBuild風格。 – Cheeso 2010-12-26 14:31:48