CMake error : "include could not find load file GoogleTest"
CMake error : "include could not find load file GoogleTest"
我在向 CMakeLists.txt 添加 google 测试时遇到问题。
问题是“错误:include 找不到加载文件:
GoogleTest.
我已经使用以下命令安装了 google 测试:
- sudo apt-get 安装 libgtest-dev
- sudo apt-get install cmake # 安装 cmake
- cd /usr/src/gtest
- sudo cmake CMakeLists.txt
- sudo make
- 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中。
我在向 CMakeLists.txt 添加 google 测试时遇到问题。
问题是“错误:include 找不到加载文件: GoogleTest.
我已经使用以下命令安装了 google 测试:
- sudo apt-get 安装 libgtest-dev
- sudo apt-get install cmake # 安装 cmake
- cd /usr/src/gtest
- sudo cmake CMakeLists.txt
- sudo make
- 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中。