我想在CMake项目中使用gtest。以前,我构建了gtest,并将头文件和库文件复制到可以找到它们的位置,以克服缺少Ubuntu包来提供相同内容的问题。
gtest开发人员推荐的方法是build gtest inside the project that is using it。
但是,我也想使用在CMake的GoogleTest module中定义的函数gtest_add_tests和gtest_discover_tests。
但是find_package(GTest REQUIRED)失败了,因为库还没有构建好:
Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)因此,这似乎必须是一个两阶段的过程,并且没有办法保证遵守“一个定义规则”。我是否需要编写一个自定义的FindGTest.cmake来定义函数,但不查找库,这样它们只在cmake完成并构建它们之后才可用?
发布于 2014-07-24 06:22:32
您可以考虑使用外部项目。
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 "")发布于 2016-01-24 10:14:56
另一种选择是在CMake时将GoogleTest源代码提供给您的构建,然后使用add_subdirectory将它们拉入其中。这将确保使用与主项目相同的编译器设置构建GoogleTest。您不能使用FindGTest模块,但您可以使用gtest和gtest_main CMake目标,这些非常方便。例如,它们携带依赖项信息和特定于平台的库名称,因此您所要做的只是根据需要链接到gtest或gtest_main目标,CMake将为您完成剩下的工作。
如果您想让CMake为您下载GoogleTest源代码,作为CMake配置步骤的一部分,那么this article将解释如何做到这一点。它包括一个完整的例子,它应该向你展示如何让它工作。该方法使用ExternalProject在配置时作为CMake脚本调用它,而不是延迟下载到构建时,从而仅执行下载阶段。这允许您随后调用add_subdirectory,因为源代码会立即下载,并可用于CMakeLists.txt文件的后续部分。更新:这种方法现在也是part of the googletest documentation。
另请注意,GoogleTest现在已与GoogleMock合并,规范存储库具有moved to github。
发布于 2014-11-13 17:44:19
如果你不需要find_package,你有没有尝试过
include(FindGTest)在使用gtest_add_tests之前
在这里,我还要指出http://smspillaz.wordpress.com/2012/07/05/unit-test-autodiscovery-with-cmake-and-google-test/,它看起来是一个更好的GTEST_ADD_TESTS解决方案
免责声明:我自己都没有尝试过。
https://stackoverflow.com/questions/24917260
复制相似问题