Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么CMake找不到GTest(谷歌测试)?_C++_Cmake_Googletest - Fatal编程技术网

C++ 为什么CMake找不到GTest(谷歌测试)?

C++ 为什么CMake找不到GTest(谷歌测试)?,c++,cmake,googletest,C++,Cmake,Googletest,有一个现成的项目。在其中一个cmake文件中,有一个源代码: find_package(GTest REQUIRED) if (NOT GTest_FOUND) message(FATAL_ERROR "Cannot find Google Test Framework!") endif() 给出一个错误:“找不到Google测试框架!” 如何修复错误?这可能对您很有用,因此您不必依赖本地的google测试安装,如果您的计算机中安装了google测试,这应该可以独立工作 您可以将其添加

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

find_package(GTest REQUIRED)
if (NOT GTest_FOUND)
    message(FATAL_ERROR "Cannot find Google Test Framework!")
endif()
给出一个错误:“找不到Google测试框架!”


如何修复错误?

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

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

这将下载google测试,配置安装并在主构建文件夹中的供应商/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)
add_可执行文件(tester test/tester.cc)
目标链接库(测试仪gtest)
启用_测试()
添加测试(测试仪)
虽然CMake自2009年起提供了一个模块

我更喜欢将googletest纳入您的CMake项目,就像在googletest文档中解释一样。


注意:
FindGTest.cmake
文件使用环境变量
GTEST_ROOT
进行更详细的解释。 您可以将此变量添加到系统中,也可以将其添加到
CMakeLists.txt
文件中:

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

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

您的系统在哪里安装了GTest?将这些信息添加到问题帖子中,因为“找不到软件包”这样的问题如果不知道你真的拥有软件包是没有用的。这也取决于你的平台。Windows和Mac可能需要不同的设置。欢迎访问该网站。想解释一下脚本的作用吗?只有代码的答案被认为是低质量的。感谢您提供此代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请您的回答添加一些解释,包括您所做的假设。为什么不简单地指出cmake提供了这个FindGTest.cmake文件:但现在您提出了一个有趣的问题,即“c:/path/to/gtest/root”实际上对应于什么,不仅是在Linux上,而且是在cmake想要玩的其他操作系统上。您说得对!有许多操作系统和安装方式。因此,每次提出新问题时,这可能是一个新问题。简短的回答是:将repo()克隆到您选择的文件夹中,并在这个新文件夹中构建它。那么GTEST_ROOT应该指向这个。你同意吗?