首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CPack:从子目录(googletest目录)排除安装命令

CPack:从子目录(googletest目录)排除安装命令
EN

Stack Overflow用户
提问于 2016-02-11 16:01:57
回答 2查看 5.9K关注 0票数 10

我将CMake用于一个项目,googletest用于我的测试用例。纵观互联网,只需将googletest源复制到存储库的子文件夹中,并将其包含在"add_subdirectory(googletest)“中,这似乎是一种常见的做法。那是我做的。

现在,我使用CPack为我的项目生成debian包。不幸的是,CPack install生成的包与我的项目一起出现。这当然不是我想要的。

在googletest目录中,我发现了一些安装cmake命令,所以很清楚为什么会发生这种情况。现在的问题是-我怎么才能避免呢?我不喜欢修改googletest中的CMakeLists.txt文件,因为我必须记住在更新时重新应用我的修改。是否有另一种方法在CPack中禁用这些安装?

EN

回答 2

Stack Overflow用户

发布于 2017-03-27 09:45:27

因此,前面提到的宏选项@Tsyvarev最初建议使用这里

代码语言:javascript
复制
# overwrite install() command with a dummy macro that is a nop
macro (install)
endmacro ()

# configure build system for external libraries
add_subdirectory(external)

# replace install macro by one which simply invokes the CMake
install() function with the given arguments
macro (install)
  _install(${ARGV})
endmacro(install)

注意,${ARGV}${ARGN}是相同的,但是文档目前建议使用${ARGN}。此外,宏覆盖将_前置到原始宏名称的事实没有记录下来,但它仍然是行为。请参阅代码这里

然而,我从来没有让上述代码正常工作。它做了一些很奇怪的事情,经常给install()打两次电话。

另一种--也是无证--是使用EXCLUDE_FROM_ALL

代码语言:javascript
复制
add_subdirectory(external EXCLUDE_FROM_ALL)

根据一些评论,我在某个地方发现这个子目录禁用了install()。我认为它实际上所做的是为所有的EXCLUDE_FROM_ALL命令默认设置install(),这也可能是您想做的事情。我还没有真正测试过,值得一试。

票数 14
EN

Stack Overflow用户

发布于 2018-08-08 12:10:03

回复有点晚,但我只是花了很长时间才弄明白这一点。

在googletest的特定情况下,在顶级CMakeLists.txt中指定这一点非常有用。

代码语言:javascript
复制
option(INSTALL_GMOCK "Install Googletest's GMock?" OFF)
option(INSTALL_GTEST "Install Googletest's GTest?" OFF)
add_subdirectory(googletest)

我在(我认为) CMake邮件列表中看到,将包中的INSTALL_<package name>作为安装条件是一种事实上的标准(从现在起我肯定会遵循这个标准)。但我现在找不到那个联系了。

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

https://stackoverflow.com/questions/35344132

复制
相关文章

相似问题

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