【问题标题】:gtest setup cmake to get it rungtest setup cmake 让它运行
【发布时间】:2016-02-06 13:51:38
【问题描述】:

我想将 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.txtgtest

    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.txtbasic_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)

【问题讨论】:

  • 你能先修复你的链接吗?
  • sry,作为新会员,我只能在一个帖子中发送2个链接
  • 你能把问题降到最低吗?
  • 希望你现在能更好地理解它
  • 为什么要这样使用gtest&gmock?我以完全不同的方式使用它:我为我的 Visual Studio 版本构建了两个库,并将其放置在文件系统的某个位置(不在项目内部)和项目内部,我使用 find_package 查找 gtest&gmock,它是在我看来要简单得多。

标签: c++ cmake clion


【解决方案1】:

我假设您的编译器抱怨找不到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/

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2015-03-15
    • 2018-10-02
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多