2013-04-17 3 views
4

Я пытаюсь добавить некоторые пользовательские построения команды к моему 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

ответ

0

Для выпуска 1 попробуйте "c:\\Some Folder\\MyTool.exe" -arg0 -arg1. Параметр ARGS не требуется, но точка должна опускать кавычки вокруг -arg0 -arg1.

Для вопроса 2, поскольку $(PATH_MACRO) не является абсолютным путем, CMake рассматривает его как путь относительно исходного каталога. Лучший способ разрешить это, вероятно, использовать «генераторные выражения», но без дополнительной информации о вашем конкретном случае я не могу дать лучший ответ.

Информацию о выражениях генераторов см. В документах для add_custom_command.

+0

Спасибо Fraser. Я знаю выражения generator_, и я уже использовал что-то вроде '$ ' в моем CMakeLists.txt. Но это действительно не полезно для этого случая. Меня просто интересует, что, если есть так или иначе, я могу остановить CMake, делающий автоматическое расширение, и только сохранить свою сырую строку. –

+0

Я думаю, что единственным способом было бы полностью квалифицировать макрос - пройти абсолютный путь, но, может быть, кто-то еще лучше знает? – Fraser

Смежные вопросы