cmake - CMake 错误:“包含找不到加载文件 GoogleTest”
问题描述
我在将 googletests 添加到 CMakeLists.txt 时遇到问题。
问题是"Error:include could not find load file: GoogleTest"。
我已经使用以下命令安装了谷歌测试:
- sudo apt-get install libgtest-dev
- sudo apt-get install cmake # 安装 cmake
- cd /usr/src/gtest
- sudo cmake CMakeLists.txt
- 须藤制作
- 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})
如果您给我一个建议,我将不胜感激!
解决方案
如果您已经安装了 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 中。
推荐阅读
- iis - ASP.NET Core 应用程序在空闲后响应请求很慢
- c# - 如何正确地对变量应用强制转换,以便它带来强制转换附带的方法?
- .net - 如何测试 .Net Core 测试项目引用的 .NETStandard 程序集测试?
- json - 从两列数据框(Python3)为 d3 可折叠树视觉创建 json 层次结构树
- java - findBySQL 对有效查询不返回任何内容
- sql - 用于 CSV 导出的 TRIM char 空格尾随空格
- c++ - 如何通过使用整数指向地址来增加数组
- sql - 使用单独字段的 Case 语句
- excel - 如何在范围引用中引用单元格中的值
- python - 一个关于 C3 的例子