CMake错误:";include找不到加载文件GoogleTest“;

CMake错误:";include找不到加载文件GoogleTest“;,cmake,googletest,Cmake,Googletest,我在将Google测试添加到CMakeLists.txt时遇到问题 问题是“错误:include找不到加载文件: 谷歌测试“ 我使用以下命令安装了google测试: sudo apt get安装libgtest dev sudo apt get install cmake#install cmake cd/usr/src/gtest sudo cmake CMakeLists.txt sudo-make sudo cp*.a/usr/lib 这些命令是我从他那里得到的。 这是我的CMakeLis

我在将Google测试添加到CMakeLists.txt时遇到问题

问题是“错误:include找不到加载文件: 谷歌测试“

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

  • sudo apt get安装libgtest dev
  • sudo apt get install cmake#install cmake
  • cd/usr/src/gtest
  • sudo cmake CMakeLists.txt
  • sudo-make
  • 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})
    
    target_link_libraries($YOUR_TARGTET gtest)
    
    add_subdirectory(googletest)
    
    add_subdirectory(googletest)
    # ...
    
    include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
    # ...
    add_executable(my_test...)
    target_link_libraries(my_test gtest)
    # ...
    
    cmake_最低要求(3.6.2版)
    集合(CMAKE_CXX_编译器clang++)
    套装(CMAKE_CXX_标准17)
    项目(编译器)
    包括目录(${CMAKE\u CURRENT\u BINARY\u DIR}${CMAKE\u CURRENT\u SOURCE\u DIR})
    查找_包(需要FLEX)
    FLEX\u目标(lexer src/lexer.fl${CMAKE\u CURRENT\u BINARY\u DIR}/lexer.cpp)
    查找包(需要GTest)
    
    include(GoogleTest)如果您已经安装了libgtest,只需在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})
    
    target_link_libraries($YOUR_TARGTET gtest)
    
    add_subdirectory(googletest)
    
    add_subdirectory(googletest)
    # ...
    
    include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
    # ...
    add_executable(my_test...)
    target_link_libraries(my_test gtest)
    # ...
    
    但是 最好是直接将第三方库包含到项目中。我会从这条路走到这里,然后再走

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

    将googletest源代码(请检查前面的链接)克隆到您的项目中,并将以下内容添加到主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})
    
    target_link_libraries($YOUR_TARGTET gtest)
    
    add_subdirectory(googletest)
    
    add_subdirectory(googletest)
    # ...
    
    include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
    # ...
    add_executable(my_test...)
    target_link_libraries(my_test gtest)
    # ...
    
    在需要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中:

    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})
    
    target_link_libraries($YOUR_TARGTET gtest)
    
    add_subdirectory(googletest)
    
    add_subdirectory(googletest)
    # ...
    
    include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
    # ...
    add_executable(my_test...)
    target_link_libraries(my_test gtest)
    # ...
    
    在tests 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})
    
    target_link_libraries($YOUR_TARGTET gtest)
    
    add_subdirectory(googletest)
    
    add_subdirectory(googletest)
    # ...
    
    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中


    在您参考的教程中找不到一行
    include(GoogleTest)
    。相反,教程建议使用另一种方式链接Google测试库。