首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在add_custom_command中带有不必要的引号的cmake包装命令

在add_custom_command中带有不必要的引号的cmake包装命令
EN

Stack Overflow用户
提问于 2017-08-10 18:01:40
回答 1查看 880关注 0票数 0

使用cmake 2.8.12.1,我有以下几行:

代码语言:javascript
复制
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说“没有这样的文件或目录”:

代码语言:javascript
复制
[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中的新行:

代码语言:javascript
复制
#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运行的结果:

代码语言:javascript
复制
[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就会更聪明,并且用不需要的双引号包围我的整个命令。

如何在不引用字符串的情况下执行命令(包括舵)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 18:32:57

既然我张贴了这个问题,我就找到了解决办法。

The tilde can be replaced with $ENV{HOME}.

所以我的命令变成:

代码语言:javascript
复制
set(LCOV $ENV{HOME}/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/check/root/usr/local/bin/lcov)

这为我解决了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45620606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档