首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在项目中构建gtest,如何在cmake中使用find_package(GTest)和GTEST_ADD_TESTS?

如何在项目中构建gtest,如何在cmake中使用find_package(GTest)和GTEST_ADD_TESTS?
EN

Stack Overflow用户
提问于 2014-07-24 01:38:56
回答 3查看 4.2K关注 0票数 5

我想在CMake项目中使用gtest。以前,我构建了gtest,并将头文件和库文件复制到可以找到它们的位置,以克服缺少Ubuntu包来提供相同内容的问题。

gtest开发人员推荐的方法是build gtest inside the project that is using it

但是,我也想使用在CMake的GoogleTest module中定义的函数gtest_add_testsgtest_discover_tests

但是find_package(GTest REQUIRED)失败了,因为库还没有构建好:

代码语言:javascript
复制
Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)

因此,这似乎必须是一个两阶段的过程,并且没有办法保证遵守“一个定义规则”。我是否需要编写一个自定义的FindGTest.cmake来定义函数,但不查找库,这样它们只在cmake完成并构建它们之后才可用?

EN

回答 3

Stack Overflow用户

发布于 2014-07-24 06:22:32

您可以考虑使用外部项目。

http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html

你可以大致像下面这样使用它(从我做同样事情的代码中,版本可能会有所不同,等等):

代码语言:javascript
复制
set(GTest_version 1.6.0)
set(GTest_url "http://googletest.googlecode.com/files/gtest-${GTest_version}.zip")
set(GTest_md5 "4577b49f2973c90bf9ba69aa8166b786")
set(GTest_BUILD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/build")
set(GTest_BUILD_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/install")
set(GTest_DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Downloads")

ExternalProject_Add(GTest
  URL ${GTest_url}
  URL_MD5 ${GTest_md5}
  PREFIX  ${GTest_BUILD_PREFIX}
  DOWNLOAD_DIR ${GTest_DOWNLOAD_DIR}
  CMAKE_GENERATOR ${gen}
  CMAKE_ARGS
    -DBUILD_SHARED_LIBS:BOOL=ON
    -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
    -DCMAKE_INSTALL_PREFIX:PATH=${GTest_BUILD_INSTALL_PREFIX}
    -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
)

set(GTEST_ROOT ${GTest_BUILD_INSTALL_PREFIX} CACHE STRING "")
票数 3
EN

Stack Overflow用户

发布于 2016-01-24 10:14:56

另一种选择是在CMake时将GoogleTest源代码提供给您的构建,然后使用add_subdirectory将它们拉入其中。这将确保使用与主项目相同的编译器设置构建GoogleTest。您不能使用FindGTest模块,但您可以使用gtestgtest_main CMake目标,这些非常方便。例如,它们携带依赖项信息和特定于平台的库名称,因此您所要做的只是根据需要链接到gtestgtest_main目标,CMake将为您完成剩下的工作。

如果您想让CMake为您下载GoogleTest源代码,作为CMake配置步骤的一部分,那么this article将解释如何做到这一点。它包括一个完整的例子,它应该向你展示如何让它工作。该方法使用ExternalProject在配置时作为CMake脚本调用它,而不是延迟下载到构建时,从而仅执行下载阶段。这允许您随后调用add_subdirectory,因为源代码会立即下载,并可用于CMakeLists.txt文件的后续部分。更新:这种方法现在也是part of the googletest documentation

另请注意,GoogleTest现在已与GoogleMock合并,规范存储库具有moved to github

票数 1
EN

Stack Overflow用户

发布于 2014-11-13 17:44:19

如果你不需要find_package,你有没有尝试过

代码语言:javascript
复制
include(FindGTest)

在使用gtest_add_tests之前

在这里,我还要指出http://smspillaz.wordpress.com/2012/07/05/unit-test-autodiscovery-with-cmake-and-google-test/,它看起来是一个更好的GTEST_ADD_TESTS解决方案

免责声明:我自己都没有尝试过。

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

https://stackoverflow.com/questions/24917260

复制
相关文章

相似问题

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