【问题标题】:Why does CMake not find GTest (Google Test)?为什么 CMake 找不到 GTest (Google Test)?
【发布时间】:2018-02-19 10:31:56
【问题描述】:

有一个现成的项目。在其中一个 cmake 文件中有一个源代码:

find_package(GTest REQUIRED)
if (NOT GTest_FOUND)
    message(FATAL_ERROR "Cannot find Google Test Framework!")
endif()

给出错误:“找不到 Google 测试框架!”

如何解决错误?

【问题讨论】:

  • GTest 安装在您系统的什么位置?将此信息添加到问题帖子中,因为“找不到包”之类的问题如果不知道您实际上拥有该包是无用的。
  • 这也取决于您的平台。 Windows 和 Mac 可能需要不同的设置。

标签: c++ cmake googletest


【解决方案1】:

FindGTest.cmake 文件使用环境变量GTEST_ROOT。 您可以将此变量添加到您的系统中,也可以将其添加到您的 CMakeLists.txt 文件中:

set(GTEST_ROOT "c:/path/to/gtest/root" CACHE PATH "path to gtest"). 

这应该可以解决您的问题。当然可以将 gtest 完全添加到项目中(就像 Luis Miglietti 建议的那样),但这可能不是您第一次尝试时想要做的。

【讨论】:

  • 但是现在你提出了一个有趣的问题,即“c:/path/to/gtest/root”实际上对应于什么,不仅在 Linux 上,而且在 cmake 想要播放的其他操作系统上。
  • 你在说它!有许多操作系统和安装方式。所以这可能是每次一个新问题。简短的回答:将 repo (github.com/google/googletest) 克隆到您选择的文件夹中,然后在这个新文件夹中构建它。那么 GTEST_ROOT 应该指向这个。你同意吗?
【解决方案2】:

这可能对您有用,因此您不必依赖本地 google 测试安装,如果您的机器上安装了 google 测试,这应该独立工作

您可以将其添加到您的 cmake 文件中(您应该根据您的项目结构注意正确的链接/包含)

这将下载 google test,配置安装并在 vendor/gtm/gtest 中构建它(您可以随时更改此设置)在您的主构建文件夹中。然后你可以将 gtest 链接到一个可执行文件,这样你就可以从那里运行你的测试了

include(ExternalProject)
find_package(Git REQUIRED)

# Build googletest
ExternalProject_Add(
    googletest
    PREFIX "vendor/gtm"
    GIT_REPOSITORY "https://github.com/google/googletest.git"
    GIT_TAG release-1.8.0
    TIMEOUT 10
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    UPDATE_COMMAND ""
)

# Build gtest
ExternalProject_Add(
    gtest_src
    PREFIX "vendor/gtm"
    SOURCE_DIR "vendor/gtm/src/googletest/googletest"
    INSTALL_DIR "vendor/gtm/gtest"
    CMAKE_ARGS
        -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/vendor/gtm/gtest
        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
        -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
    DOWNLOAD_COMMAND ""
    UPDATE_COMMAND ""
)

# Prepare gtest
ExternalProject_Get_Property(gtest_src install_dir)
set(GTEST_INCLUDE_DIR ${install_dir}/include)
set(GTEST_LIBRARY_PATH ${install_dir}/lib/libgtest.a)
file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR})
add_library(gtest STATIC IMPORTED)
set_property(TARGET gtest PROPERTY IMPORTED_LOCATION  ${GTEST_LIBRARY_PATH})
set_property(TARGET gtest APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR})

add_dependencies(gtest_src googletest)
add_dependencies(gtest gtest_src)

然后您可以将 gtest 链接到具有类似

的可执行文件
add_executable(tester test/tester.cc)
target_link_libraries(tester gtest)
enable_testing()
add_test(<library> tester)

【讨论】:

【解决方案3】:

虽然 CMake 从 2009 年开始提供 FindGTest.cmake 模块...

我更喜欢在你的 CMake 项目中加入 googletest,就像在 googletest 文档中解释的那样。
https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project

注:更详细的解释http://crascit.com/2015/07/25/cmake-gtest/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多