C++ 为什么CMake找不到GTest(谷歌测试)?
有一个现成的项目。在其中一个cmake文件中,有一个源代码: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测试,这应该可以独立工作 您可以将其添加
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应该指向这个。你同意吗?