使用cmake 2.8.12.1,我有以下几行:
set(LCOV ~/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov)
separate_arguments(LCOV_PARAMS UNIX_COMMAND "--capture --directory ./CMakeFiles/mylib.dir --output-file coverage.info")
add_custom_command(
OUTPUT coverage.info
COMMAND ${LCOV} ${LCOV_PARAMS}
DEPENDS tests)当我使用VERBOSE=1运行make时,我可以看到命令正在被双引号包装,当然shell说“没有这样的文件或目录”:
[100%] Generating coverage.info
"~/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov" --capture --directory ./CMakeFiles/mylib.dir --output-file coverage.info
/bin/sh: ~/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov: No such file or directory当我只从命令中移除倾斜时,cmake决定不再需要重复引用它。CMakeLists.txt中的新行:
#set(LCOV ${JENKINS_TOOL_DIR}/check/root/usr/local/bin/lcov)
set(LCOV /tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov)
separate_arguments(LCOV_PARAMS UNIX_COMMAND "--capture --directory ./CMakeFiles/mylib.dir --output-file coverage.info")
add_custom_command(
OUTPUT coverage.info
COMMAND ${LCOV} ${LCOV_PARAMS}
DEPENDS tests)以及使用VERBOSE=1运行的结果:
[100%] Generating coverage.info
/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov --capture --directory ./CMakeFiles/mylib.dir --output-file coverage.info
make[3]: /tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov: Command not found我不明白为什么cmake要为我添加引号。我已经试过详细了。我尝试将命令字符串放入add_custom_command (避免set()调用)。只要倾斜器在那里,cmake就会更聪明,并且用不需要的双引号包围我的整个命令。
如何在不引用字符串的情况下执行命令(包括舵)?
发布于 2017-08-10 18:32:57
既然我张贴了这个问题,我就找到了解决办法。
The tilde can be replaced with $ENV{HOME}.
所以我的命令变成:
set(LCOV $ENV{HOME}/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov)这为我解决了这个问题。
https://stackoverflow.com/questions/45620606
复制相似问题