在CMake字符串中添加引号

Pow*_*ell 7 escaping cmake

我正在使用CMake创建和构建我的项目解决方案。我正在使用以下命令来添加构建后事件,以将.tlb从本地bin复制到程序bin。

ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND xcopy /D /Y "${CMAKE_SOURCE_DIR}LocalBin\\example.tlb" "${CMAKE_SOURCE_DIR}ProgramBin\\$<CONFIGURATION>\\")
Run Code Online (Sandbox Code Playgroud)

将命令添加到项目属性后,该命令将添加为

xcopy / D / Y LocalBin \ example.tlb ProgramBin \ Debug \

但是,这给了我一个错误。退出代码4。

如果我进入项目属性并修改命令行,然后将其更改为添加“”

xcopy / D / Y“ LocalBin \ example.tlb”“ ProgramBin \ Debug \”

有用。

有没有一种方法可以更改CMake add custom命令以在实际命令行中包含“”,这样它就可以工作,并且无需手动更改项目属性。

usr*_*567 7

您必须在字符串内转义引号。转义使用反斜杠在CMake中完成。因此,请在字符串中添加引号,然后添加\"

引用CMake文档https://cmake.org/cmake/help/v3.4/manual/cmake-language.7.html#escape-sequences

\随后的非字母数字字符简单地编码文字字符,而不将其解释为语法

在您的情况下,您最终会得到

"\"${CMAKE_SOURCE_DIR}LocalBin\\example.tlb\""
Run Code Online (Sandbox Code Playgroud)

代替

"${CMAKE_SOURCE_DIR}LocalBin\\example.tlb"
Run Code Online (Sandbox Code Playgroud)


Ale*_*erg 6

经过一段时间的努力后,我找到了一个使用生成器表达式的可行解决方案:

ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND xcopy /D /Y $<1:"${CMAKE_SOURCE_DIR}LocalBin\\example.tlb"> $<1:"${CMAKE_SOURCE_DIR}ProgramBin\\$<CONFIGURATION>\\">)
Run Code Online (Sandbox Code Playgroud)

这是CMake 中的一个未解决的错误