为什么CMake找不到GTest(Google Test)?

时间:2018-02-19 10:31:56

标签: c++ cmake googletest

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

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

发出错误:“无法找到Google测试框架!”

如何修复错误?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

自2009年以来,CMake提供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/

答案 2 :(得分:-1)

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

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

这将下载google测试,配置安装并在主构建文件夹中的 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)