gtest 设置 cmake 以获取它 运行

gtest setup cmake to get it run

我想将 gtest 包含到我的 C++ 项目中。我将 Clion 用作 IDE,应该可以。一些测试已经在运行,但我无法使用 B_RocChoice.h 中的任何功能。它说该函数未在此范围内声明。

有人可以告诉我我做错了什么吗?我必须如何更改它识别我的方法的 CMakeLists.txt 文件?

这是我的 basic_tests.cpp,我的测试用例将写在这里。

这是我的Directory

这里最外层CMakeLists.txt

    cmake_minimum_required(VERSION 2.8)
    project(cli)

    find_package( OpenCV REQUIRED )
    include_directories( ${OpenCV_INCLUDE_DIRS} )

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")

    set(SOURCE_FILES
        include/A_WowbaggerChoice.h
        include/AbstractChoice.h
        include/B_RocChoice.h
        include/C_CnnChoice.h
        include/D_DetectorChoice.h
        include/E_LearningChoice.h
        include/Help.h
        include/MyException.h
        include/StartScreen.h
        include/tinyxml.h
        include/types.h
        src/A_WowbaggerChoice.cpp
        src/AbstractChoice.cpp
        src/B_RocChoice.cpp
        src/C_CnnChoice.cpp
        src/D_DetectorChoice.cpp
        src/E_LearningChoice.cpp
        src/Help.cpp
        src/main.cpp
        src/MyException.cpp
        src/StartScreen.cpp
        tinyxml/tinystr.cpp
        tinyxml/tinystr.h
        tinyxml/tinyxml.cpp
        tinyxml/tinyxml.h)

    add_subdirectory(googletest)

    add_executable(cli ${SOURCE_FILES})
    target_link_libraries( cli ${OpenCV_LIBS} )

CMakeLists.txt 对于 gtest

    cmake_minimum_required(VERSION 2.6.2)

    project( googletest-distribution )

    enable_testing()

    option(BUILD_GTEST "Builds the googletest subproject" ON)

    #Note that googlemock target already builds googletest
    option(BUILD_GMOCK "Builds the googlemock subproject" OFF)

    if(BUILD_GMOCK)
      add_subdirectory( googlemock )
    elseif(BUILD_GTEST)
      add_subdirectory( googletest )
    endif()

    add_subdirectory(basic_tests)

CMakeLists.txt 对于 basic_tests

    include_directories($(gtest_SOURCE_DIR}/include    
           ${getest_SOURCE_DIR}))
    #include_directories(../../src/)
    include_directories(../../include/)

    add_executable(runBasicCli
        basic_check.cpp)

    target_link_libraries(runBasicCli gtest gtest_main)
    #target_link_libraries(cli)

我假设您的编译器正在抱怨找不到 B_RocChoices.h header?您的问题似乎暗示编译器错误是关于找不到函数,但 B_RocChoices 是 header 而不是 basic_tests.cpp 文件中的函数。

假设您的问题是编译器没有找到 B_RocChoices.h header,我预计当您 include_directories(../../include) 时,您想要创建 [=11= 所在的目录] 位于 header 搜索路径的一部分。这是一个相对路径,因此它取决于编译器从哪里 运行 以及它意味着什么路径(例如,如果您在源代码之外进行构建,它就不会工作)。尝试使用 CMAKE_SOURCE_DIR 或 CMAKE_CURRENT_SOURCE_DIR 来明确定义路径。例如:

include_directories(${CMAKE_SOURCE_DIR}/include)

如果您使用的是 CMake 2.8.11 或更高版本,我建议您考虑使用 target_include_directories() instead and probably also read up on target_link_libraries()。这些一起允许您使 header 搜索路径和 linked 库特定于目标而不是所有目标的全局。最后,如果您更愿意将 GoogleTest 作为构建的一部分下载,而不是将其直接嵌入到您的项目源代码中,您可能会发现以下 link 有用:

https://crascit.com/2015/07/25/cmake-gtest/