我正在使用 CMake 进行项目,并使用 googletest 进行测试用例。
环顾互联网,通常的做法是将 googletest 源代码复制到存储库的子文件夹中,并将其包含在“add_subdirectory(googletest)”中。我就是这么做的。
现在我正在使用 CPack 为我的项目生成 debian 包。不幸的是,CPack 生成的包与我的项目一起安装 googletest。这当然不是我想要的。
查看 googletest 目录,我发现那里有一些 INSTALL cmake 命令,所以很清楚为什么会发生这种情况。现在的问题是——我该如何避免呢?我不喜欢从 googletest 修改 CMakeLists.txt 文件,因为我必须记住在更新时重新应用我的修改。是否有其他方法可以在 CPack 中禁用这些安装?
所以最初建议使用@Tsyvarev 提到的宏选项here:
# 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)
Note ${ARGV}
and ${ARGN}
是相同的,但文档当前建议使用${ARGN}
。还有宏覆盖前置的事实_
原始宏名称没有记录,但它仍然是行为。查看代码here.
However,我从来没有让上面的代码正常工作。确实如此really奇怪的事情并且经常打电话install()
twice.
另一种选择 - 也没有记录 - 是使用EXCLUDE_FROM_ALL
:
add_subdirectory(external EXCLUDE_FROM_ALL)
根据一些评论我发现这会禁用install()
对于该子目录。我认为它实际上做了什么EXCLUDE_FROM_ALL
默认情况下对于所有install()
命令也可能做你想要的。我还没有真正测试过,但值得一试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)