Jack Kelly の提案に付け加えると、CMD.EXE シェルで存在のテストを行うことができます。NMake には、一時的な .cmd ファイルを作成して実行する機能も含まれています。
「check-syntax」ターゲットに使用する (n)makefile 構文の例を次に示します。複数ファイルのプロジェクトで、コンパイルを実行することにより、単一の 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 ファイルに渡される引数です。この例では、引数は という makefile 変数の内容ですCS_SOURCE
。私の場合、これはプロジェクト内のファイル名のリストです。Makefile 変数は、一時ファイルのテキスト内でも展開されます。_CSC
コンパイラ ( ) とその他のシンボルを参照していることがわかります。
.cmd コード内では、for ループ、if ステートメントなど、好きなことを行うことができます。これは通常の .cmd ファイルです。
.cmd ファイル内のコマンドによって生成されたエラー (ビルドの終了など) に nmake が応答するようにする場合はexit /b
、cmd を終了する方法を使用する必要があります。
これに関するドキュメントはどこか暗いコーナーで見つけたので、一般的な説明のためにここで共有したいと思いました. (編集:ここにリンクがあります。)