我想在 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 构建它们之后它们才可用?
您可以考虑使用外部项目。
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)
| 归档时间: |
|
| 查看次数: |
4185 次 |
| 最近记录: |