Hei*_*nzi 6 c++ install cmake googletest cpack
我正在使用CMake进行项目,并使用googletest进行测试用例.通过浏览互联网,将googletest源复制到存储库的子文件夹并将其包含在"add_subdirectory(googletest)"中似乎是一种常见做法.我做到了
现在我正在使用CPack为我的项目生成debian包.不幸的是,CPack生成的软件包与我的项目一起安装了googletest.这当然不是我想要的.
在googletest目录中,我在那里找到了一些INSTALL cmake命令,所以很明显,为什么会这样.现在的问题是 - 我该如何避免呢?我不喜欢从googletest修改CMakeLists.txt文件,因为我必须记住在更新时重新应用我的修改.是否有另一种方法可以在CPack中禁用这些安装?
Tim*_*mmm 11
所以提到的@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)
Run Code Online (Sandbox Code Playgroud)
注意${ARGV}
并且${ARGN}
是相同的,但目前建议使用的文档${ARGN}
.此外,宏记录前缀_
为原始宏名称的事实没有记录,但它仍然是行为.请参阅此处的代码.
但是,我从来没有让上面的代码正常工作.它真的很奇怪,经常打install()
两次电话.
另一种 - 也没有记录 - 是使用EXCLUDE_FROM_ALL
:
add_subdirectory(external EXCLUDE_FROM_ALL)
Run Code Online (Sandbox Code Playgroud)
根据一些评论我发现某处禁用install()
该子目录.我认为它实际上做的是EXCLUDE_FROM_ALL
默认设置所有install()
命令,也可能做你想要的.我还没有真正测试过它,值得一试.
如果您不需要在项目的发布中进行测试(您希望使用CPack提供),那么googletest
有条件地包含子目录,并在打包时将条件设置为false:
...
if(NOT DISABLE_TESTS)
add_subdirectory(googletest)
endif()
Run Code Online (Sandbox Code Playgroud)
包装用
cmake -DDISABLE_TESTS=ON <source-dir>
cpack
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要测试,但又不想安装测试基础结构,则可以install
通过定义具有相同名称的宏或函数来禁用命令:
# Replace install() to do-nothing macro.
macro(install)
endmacro()
# Include subproject (or any other CMake code) with "disabled" install().
add_subdirectory(googletest)
# Restore original install() behavior.
macro(install)
_install(${ARGN})
endmacro()
Run Code Online (Sandbox Code Playgroud)
在CMake邮件中也提出了这种方法.
小智 8
回复有点晚了,但我花了太长时间才弄清楚这一点。
在 googletests 的特定情况下,在顶级 CMakeLists.txt 中指定这一点可以解决问题。
option(INSTALL_GMOCK "Install Googletest's GMock?" OFF)
option(INSTALL_GTEST "Install Googletest's GTest?" OFF)
add_subdirectory(googletest)
Run Code Online (Sandbox Code Playgroud)
我在 CMake 邮件列表上读到(我认为),在包内部设置安装条件INSTALL_<package name>
是一种事实上的标准(从现在开始我肯定会遵循这个标准!)。但我现在找不到那个链接了。
归档时间: |
|
查看次数: |
2000 次 |
最近记录: |