如何将包含尖括号的编译器选项传递到 CMake 的 add_compiler_options()?

How do I pass a compiler option that contains angle brackets into CMake's add_compiler_options()?

提问人:Janbur 提问时间:10/24/2023 更新时间:10/24/2023 访问量:29

问:

我正在尝试让 QT 的 Squish Coco 代码覆盖率工具在我基于 CMake 的构建环境中工作,而无需使用CMAKE_C_FLAGS_COVERAGE全局变量。我在 Windows 上使用 CMake 版本 3.24.2。我有以下全局编译器选项,我需要传递到 add_compiler_options():

--cs-on --cs-output=P:\%F.<TEST_NAME>.${HOST_NAME}.%p.%t

我已经尝试了几种排列,但我无法让 CMake 停止在整个第二个选项及其值周围添加双引号。

尝试 1:

add_compile_options("$<$<CONFIG:COVERAGE>:--cs-on;--cs-output=P:\%F.<TEST_NAME$<ANGLE-R>.${HOST_NAME}.%p.%t>")

在compile_commands.json中给了我以下内容:

--cs-on \"--cs-output=P:\\coverage/%F.<TEST_NAME>.ca-pc39.%p.%t\"

尝试 2:

add_compile_options("$<$<CONFIG:COVERAGE>:--cs-on;--cs-output=\"P:\%F.<TEST_NAME$<ANGLE-R>.${HOST_NAME}.%p.%t\">")

给我:

--cs-on \"--cs-output=\\\"P:\\coverage/%F.<TEST_NAME>.ca-pc39.%p.%t\\\"\"

尝试 3:

如果我从上面的尝试 1 中删除两个尖括号,我会得到:

--cs-on --cs-output=P:\\coverage/%F.TEST_NAME.ca-pc39.%p.%t

所以尖括号导致了这种情况,无论有没有生成器表达式,它都会发生。有了报价,Coco 似乎完全忽略了这个选项。有什么方法可以防止这种情况发生吗?

cmake 双引 号括号

评论

0赞 Friedrich 10/24/2023
这回答了你的问题吗?如何在 CMake 生成器表达式中转义<>字符?
0赞 Janbur 10/24/2023
@Friedrich,不,我在上面的尝试中使用了 $<ANGLE-R>,如果存在该或左尖括号,则添加双引号。
0赞 Friedrich 10/24/2023
是的,你写的。我很抱歉。

答: 暂无答案