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

Luc*_*s W 5 cmake googletest

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

gtest 开发人员推荐的方法是在使用它的项目中构建 gtest

但是,我还想使用CMake 的GoogleTest 模块中定义的函数gtest_add_testsand 。gtest_discover_tests

find_package(GTest REQUIRED)失败了,因为库还没有建立:

Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

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

StA*_*nzo 3

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

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

您可以大致如下使用它(从我的代码来看,它执行相同的操作,版本可能有所不同,等等):

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 "")
Run Code Online (Sandbox Code Playgroud)