我有一个变量
SET(CODE_COVERAGE_EXCLUSION_LIST
""
CACHE STRING "List of resources to exclude from code coverage analysis")
必须包含表达式列表,例如:'tests/*' '/usr/*'
尝试将默认值设置为上述表达式时,将删除单引号。
如何保存它们?
此外,当我尝试通过这样的排除列表时
cmake -DCODE_COVERAGE_EXCLUSION_LIST="'tests/*' '/usr/*'" ..
初始和最终单引号丢失。如何保存它们?
最后,使用cmake-gui时也适用同样的问题。
编辑:我试图使用反斜杠来逃避引号:SET(CODE_COVERAGE_EXCLUSION_LIST
" \'tests/*\' \'/usr/*\'"
CACHE STRING "List of resources to exclude from code coverage analysis : ")
它给了我以下错误:
Syntax error in cmake code at
xxx.cmake:106
when parsing string
\'tests/*\' \'/usr/*\'
Invalid escape sequence \'
EDIT2:add_custom_target的代码(而不是add_custom_command,我的不好)
ADD_CUSTOM_TARGET(${_targetname}
# Cleanup lcov
${LCOV_PATH} --directory . --zerocounters
# Run tests
COMMAND ${_testrunner} ${ARGV3}
# Capturing lcov counters and generating report
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${_outputname}.info
COMMAND ${LCOV_PATH} --remove ${_outputname}.info 'tests/*' '/usr/*' ${CODE_COVERAGE_EXCLUSION_LIST} --output-file ${_outputname}.info.cleaned
COMMAND ${GENHTML_PATH} -o ${_outputname} ${_outputname}.info.cleaned
COMMAND ${CMAKE_COMMAND} -E remove ${_outputname}.info ${_outputname}.info.cleaned
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
)
答案 0 :(得分:1)
将我的评论转化为答案
首先 - 提出你为什么需要这些引用的问题 - 我可以重现你的问题并找到几种可能的解决方案:
在缓存变量的开头和结尾添加空格
cmake -DCODE_COVERAGE_EXCLUSION_LIST=" 'tests/*' '/usr/*' " ..
使用“转义”双引号而不是单引号
cmake -DCODE_COVERAGE_EXCLUSION_LIST:STRING="\"tests/*\" \"/usr/\"" ..
通过设置CMake 3.1引入的策略CMP0053开关,使用您的set(... CACHE ...)
示例:
cmake_policy(SET CMP0053 NEW)
set(CODE_COVERAGE_EXCLUSION_LIST
"\'tests/*\' \'/usr/*\'"
CACHE STRING "List of resources to exclude from code coverage analysis : ")
但是在代码中设置它时我也可以这样做
set(CODE_COVERAGE_EXCLUSION_LIST
"'tests/*' '/usr/*'"
CACHE STRING "List of resources to exclude from code coverage analysis : ")
从命令行调用时,引用问题似乎只是一个问题
然后 - 如果我认为您可能不需要引号 - 您可以将路径作为列表传递:
在COMMAND
cmake -DCODE_COVERAGE_EXCLUSION_LIST:STRING="tests/*;/usr/*" ..
与
add_custom_target(
...
COMMAND ${LCOV_PATH} --remove ${_outputname}.info ${CODE_COVERAGE_EXCLUSION_LIST} --output-file ${_outputname}.info.cleaned
)
会给出像
这样的东西.../lcov --remove output.info tests/* /usr/* --output-file output.info.cleaned
我还尝试添加VERBATIM
选项,因为“对于构建工具,命令的所有参数都将被正确转义,以便被调用的命令接收每个参数不变”。但在这种情况下,它没有改变任何东西。
<强>参考强>