gtest 设置 cmake 以使其运行

gtest setup cmake to get it run

本文关键字:运行 设置 cmake gtest      更新时间:2023-10-16

我想在我的C++项目中加入gtest。我正在使用Clion作为IDE,它应该可以工作。一些测试已经在工作,但我无法使用 B_RocChoice.h 中的任何功能。它说函数没有在此范围内声明。

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

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

这是我的目录。

在这里,最外在的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)

basic_tests CMakeLists.txt

    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标头?您的问题似乎暗示编译器错误是关于找不到函数,但B_RocChoices是标头而不是basic_tests.cpp文件中的函数。

假设您的问题是编译器找不到B_RocChoices.h标头,我希望当您include_directories(../../include)时,您希望将B_RocChoices.h所在的目录作为标头搜索路径的一部分。这是一个相对路径,因此它取决于编译器从何处运行,以及它的含义(例如,如果您执行源代码构建,它将不起作用(。尝试使用 CMAKE_SOURCE_DIR 或 CMAKE_CURRENT_SOURCE_DIR 明确定义路径。例如:

include_directories(${CMAKE_SOURCE_DIR}/include)

如果您使用的是 CMake 2.8.11 或更高版本,我建议您考虑改用 target_include_directories((,并且可能还会阅读 target_link_libraries((。总之,这些允许您使标头搜索路径和链接库特定于目标,而不是全局到所有目标。最后,如果您希望将GoogleTest作为构建的一部分下载,而不是直接将其嵌入到项目源代码中,您可能会发现以下链接很有用:

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