Просто чтобы добавить к предложению Джека Келли, вы можете выполнить тест на существование в оболочке CMD.EXE.NMake также включает в себя возможность создавать временный файл .cmd и выполнять его.
Вот пример (n) синтаксиса make-файла, который я использую для цели «check-syntax».Он проверяет синтаксис в одном исходном файле 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
.В моем случае это просто список имен файлов в проекте.Переменные make-файла будут также расширены в тексте для временного файла.Вы можете видеть, что я ссылаюсь на компилятор (_CSC
) и некоторые другие символы.
Внутри кода .cmd вы можете делать для циклов if, что угодно.Это обычный файл .cmd.
Если вы хотите, чтобы nmake реагировал на ошибки (например, прервать сборку), сгенерированные командами в файле .cmd, то вам нужно использовать подход exit /b
для завершения cmd.
Я нашел документацию для этого где-то в темном углу, поэтому я решил поделиться ею здесь для общего разъяснения.( РЕДАКТИРОВАТЬ : вот ссылка .)