CMAKE add_custom_command:如何使用我的原始命令

A.Y*_*.N. 5 cmake

我试图通过使用ADD_CUSTOM_COMMAND向我的vc2010项目添加一些自定义构建命令.但:

[1]我发现CMAKE会自动插入比我预期更多的代码.

例如,我希望命令完全是:

"c:\Some Folder\MyTool.exe" -arg0 -arg1
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

但实际上我得到了:

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
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.我也尝试过字符串: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如何只接受我的原始输入,而不自动扩展路径或插入我不期望的代码?我将确保我的输入对visual studio有效.谢谢!

PS.我的CMake版本:2.8.10.2.VS版:visual studio 2010 Ultimate

Fra*_*ser 0

对于问题 1,请尝试"c:\\Some Folder\\MyTool.exe" -arg0 -arg1. 该ARGS参数不是必需的,但要点是省略-arg0 -arg1.

对于问题 2,由于$(PATH_MACRO)不是绝对路径,CMake 将其视为相对于源目录的路径。解决此问题的最佳方法可能是使用“生成器表达式”,但如果没有有关您的确切情况的进一步信息,我无法提供更好的答案。

有关生成器表达式的信息,请参阅 的文档add_custom_command