我将CMake用于一个项目,googletest用于我的测试用例。纵观互联网,只需将googletest源复制到存储库的子文件夹中,并将其包含在"add_subdirectory(googletest)“中,这似乎是一种常见的做法。那是我做的。
现在,我使用CPack为我的项目生成debian包。不幸的是,CPack install生成的包与我的项目一起出现。这当然不是我想要的。
在googletest目录中,我发现了一些安装cmake命令,所以很清楚为什么会发生这种情况。现在的问题是-我怎么才能避免呢?我不喜欢修改googletest中的CMakeLists.txt文件,因为我必须记住在更新时重新应用我的修改。是否有另一种方法在CPack中禁用这些安装?
发布于 2017-03-27 09:45:27
因此,前面提到的宏选项@Tsyvarev最初建议使用这里。
# 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
。
add_subdirectory(external EXCLUDE_FROM_ALL)
根据一些评论,我在某个地方发现这个子目录禁用了install()
。我认为它实际上所做的是为所有的EXCLUDE_FROM_ALL
命令默认设置install()
,这也可能是您想做的事情。我还没有真正测试过,值得一试。
发布于 2018-08-08 12:10:03
回复有点晚,但我只是花了很长时间才弄明白这一点。
在googletest的特定情况下,在顶级CMakeLists.txt中指定这一点非常有用。
option(INSTALL_GMOCK "Install Googletest's GMock?" OFF)
option(INSTALL_GTEST "Install Googletest's GTest?" OFF)
add_subdirectory(googletest)
我在(我认为) CMake邮件列表中看到,将包中的INSTALL_<package name>
作为安装条件是一种事实上的标准(从现在起我肯定会遵循这个标准)。但我现在找不到那个联系了。
https://stackoverflow.com/questions/35344132
复制相似问题