首页 > 解决方案 > CMake 错误:“包含找不到加载文件 GoogleTest”

问题描述

我在将 googletests 添加到 CMakeLists.txt 时遇到问题。

问题是"Error:include could not find load file: GoogleTest"

我已经使用以下命令安装了谷歌测试:

  1. sudo apt-get install libgtest-dev
  2. sudo apt-get install cmake # 安装 cmake
  3. cd /usr/src/gtest
  4. sudo cmake CMakeLists.txt
  5. 须藤制作
  6. sudo cp *.a /usr/lib

我从这里得到的这些命令。有我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.6.2)

set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_STANDARD 17)

project(compiler)

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

find_package(FLEX REQUIRED)
FLEX_TARGET(lexer src/lexer.fl ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)

find_package(GTest REQUIRED)
include(GoogleTest) <- There is a problem!
add_executable(run_tests src/tests/test.cpp src/main.h ${FLEX_lexer_OUTPUTS})
target_include_directories(run_tests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(run_tests ${GTEST_LIBRARIES} stdc++fs)
#gtest_add_tests(TARGET run_tests)

add_executable(compiler src/main.h src/main.cpp src/common.h ${FLEX_lexer_OUTPUTS})

如果您给我一个建议,我将不胜感激!

标签: cmakegoogletest

解决方案


如果您已经安装了 libgtest,只需在 CMakeLists.txt 中添加以下内容:

target_link_libraries($YOUR_TARGTET gtest)

但!我觉得你把它弄得太复杂了。

最好将googletest 源代码作为第三方库直接包含到您的项目中。我会在这里和以后这样去。

当您在代码示例中涉及“apt-get”时,我假设您使用的是 Debian 或 Debian 后代。好吧,实际上,您使用的操作系统并不重要。

将 googletest 源代码(查看之前的链接)克隆到您的项目中,将以下内容添加到您的主 CMakeLists.txt 中:

add_subdirectory(googletest)

将以下内容添加到您将需要 gtest 的子 cmake 项目中:

include_directories(${PARENT_PATH_OF_GTEST}/googltest/googltest/include)
# ...
target_link_libraries($YOUR_TARGET gtest)

例如

假设您有一个具有以下结构的项目:

.
├── assets
│   └── ...
├── bin
│   ├── CMakeLists.txt
│   └── ...
├── CMakeLists.txt       <== Your main CmakeLists.txt
├── src
│   ├── CMakeLists.txt
│   └── ...
├── tests                <== Test cases
│   ├── CMakeLists.txt
│   └── ...
└── third_party
    ├── CMakeLists.txt
    ├── googletest       <=== gtest
    └── ...

在您的主要 CMakeLists.txt 中,您应该有:

add_subdirectory(tests)
add_subdirectory(third_party)
# ...

在第三方 CMakeLists.txt 中:

add_subdirectory(googletest)
# ...

在测试 CMakeLists.txt 中:

include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
# ...
add_executable(my_test...)
target_link_libraries(my_test gtest)
# ...

一个更好的例子

这是来自 Jetbrains 的 CLion 中 Gtest 的视频示例。由于 CLion 实际上基于 CMake,因此它也清楚地向您展示了如何将 GTest 集成到 CMake 中。

CLion 中的 Google 测试支持


推荐阅读