Я пытаюсь добавить некоторые пользовательские построения команды к моему vc2010 проекту с помощью ADD_CUSTOM_COMMAND. Но:Cmake add_custom_command: Как использовать мои исходные команды
[1] Я просто обнаружил, что CMAKE автоматически вставляет гораздо больше кода, чем ожидалось.
Например, я хочу, чтобы команда точно будет:
"c:\Some Folder\MyTool.exe" -arg0 -arg1
Соответствующий код в CMakeLists.txt, как:
add_custom_command(OUTPUT ${outfile}
COMMAND "c:\Some Folder\MyTool.exe" ARGS "-arg0 -arg1"
# COMMAND "\"c:\Some Folder\MyTool.exe\"" will FAIL to be parsed!
MAIN_DEPENDENCY ${infile}
VERBATIM)
, но на самом деле я получил:
setlocal
c:\Some Folder\MyTool.exe "-arg0 -arg1"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
Это не то, что я хочу. Я также попробовал строку: COMMAND "\"${MYTOOL_PATH}\" -arg0 -arg1"
, но CMake просто не смог ее разобрать, потому что перед строкой есть цитата. Так что плохо, я не могу процитировать командную строку, потому что путь c:\Some Folder\MyTool.exe
содержит пробелы.
[2] Я также замечаю, что CMake автоматически расширит мои зависимости.
Если я добавлю команду DEPENS "$(PATH_MACRO)"
, я в конечном итоге получаю путь зависимостей, автоматически расширяемый CMake: C:\MySolutionDir\$(PATH_MACRO)
; Но я хочу только $(PATH_MACRO)
, потому что я убеждаюсь, что визуальная студия понимает, что означает $(PATH_MACRO)
.
Так вот мой вопрос:
Как CMake принимать только мои исходные материалы, без автоматического расширяющегося пути или вставки коды я не ожидал? Я буду уверен, что мои входы будут действительны для визуальной студии. Благодаря!
PS. Моя версия CMake: 2.8.10.2. VS версия: visual studio 2010 Ultimate
Спасибо Fraser. Я знаю выражения generator_, и я уже использовал что-то вроде '$' в моем CMakeLists.txt. Но это действительно не полезно для этого случая. Меня просто интересует, что, если есть так или иначе, я могу остановить CMake, делающий автоматическое расширение, и только сохранить свою сырую строку. –
Я думаю, что единственным способом было бы полностью квалифицировать макрос - пройти абсолютный путь, но, может быть, кто-то еще лучше знает? – Fraser