CMake error : "include could not find load file GoogleTest"

CMake error : "include could not find load file GoogleTest"

我在向 CMakeLists.txt 添加 google 测试时遇到问题。

问题是“错误:include 找不到加载文件: GoogleTest.

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

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

这些命令是我从 here 中获取的。 有我的 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})

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

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

target_link_libraries($YOUR_TARGTET gtest)

但是!我觉得你搞得太复杂了。

最好将 googletest source code 作为第三方库直接包含到您的项目中。我会在这里和之后走这条路。

由于您在代码示例中涉及 'apt-get',我假设您使用的是 Debian 或 Debian 后代。好吧,事实上,你在哪个 OS 并不重要。

将 googletest 源代码(检查之前的 link)克隆到您的项目中,将以下内容添加到您的主 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)
# ...

在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中。

Google Test support in CLion