c++ - 如何配置我的 CMake 文件以使用 Google Test 和 CTest?

标签 c++ unit-testing build cmake googletest

我正在尝试将 GTest 框架集成到我的项目中,但不确定如何操作。我正在使用 CMake 来构建它。理想情况下,我希望创建一个单独的可执行文件来运行测试,并且我希望能够选择在单个模块或整个项目上运行测试。我也希望它能与 CTest 一起使用,但这不是优先事项。我将如何设置它?我的项目结构如下:

3rdparty
   |--gtest
      |--include
         |--(gtest includes)
      |--lib
         |--libgtest.a
src
   |--module1
      |--file1.cpp
      |--file2.cpp
      |--CMakeLists.txt
   |--module2
      |--file3.cpp
      |--file4.cpp
      |--CMakeLists.txt
   |--CMakeLists.txt
include
   |--module1
      |--file1.hpp
      |--file2.hpp
   |--module2
      |--file3.hpp
      |--file4.hpp
test
   |--module1
       |--module1test.cpp
   |--module2
       |--module2test.cpp
CMakeLists.txt

这是我的主要 CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)
project(Aura)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include_directories(include)
add_subdirectory(src)

set (run_src
    src/run.cpp
)

add_executable(aura ${run_src})
target_link_libraries(aura util)

最佳答案

好吧,我可以就概念本身提供帮助,您应该知道如何使它适应您的项目结构。所以一般来说,你想让你的程序结构如下:

Structure:
 |────CMakeLists.txt
 ├─── client
            ───────CMakeLists.txt
 ├─── libs
            ───────CMakeLists.txt
 ├─── tests 
            ───────CMakeLists.txt
            ───────googletest
                              ───────googletest
                              ───────googlemock

top cmake 可以简单地包含子目录:

cmake_minimum_required(VERSION 3.1)

project(Aura)

set (CMAKE_CXX_STANDARD 14)
add_subdirectory(client)
add_subdirectory(test)
add_subdirectory(lib)

将使您的应用可执行的客户端 cmake 如下所示:

project(AuraClient)
include_directories(${CMAKE_CURRENT_SOURCE_DIR} )

set(Aura-SRCS
        someSource.cpp
        main.cpp)
set(Aura-HEADERS
       someSource.h)

add_executable(Aura ${Aura-SRCS} ${Aura-HEADERS})
target_link_libraries(Aura auraLib)

你将保存逻辑代码的库:

project(AuraLib)

set(lib_SRCS
        SomeLogic.cpp
        )
set(lib_HEADERS
    SomeLogic.h
        )

add_library(auraLib ${lib_SRCS} ${lib_HEADERS})

和你的测试 cmake:

编辑:只是将该 cmake 更改为不太复杂的解决方案

enable_testing()

project(AuraTest)

add_subdirectory(googletest)

set(test_HEADERS
        )
set(test_SOURCES
        main.cpp
        PointTest.cpp)

add_executable(AuraTest ${test_SOURCES} ${test_HEADERS} ${mock_HEADERS})

target_include_directories(AuraTest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR})

target_link_libraries(AuraTest PRIVATE auraLib gtest gmock pthread)

关于c++ - 如何配置我的 CMake 文件以使用 Google Test 和 CTest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48632500/

相关文章:

c++ - 总是通过引用传递是一种不好的做法吗?

c++ - 如何在程序本身中打印存储在 char[] 或字符串中的值

python - 具有原始规范 Python 的模拟类

ios - 在 Xcode 中构建时添加变量

c++ - 需要帮助来重载运算符 +

c++ - 使用 std::tie 比较结构

c# - 断言比较两个对象列表 C#

android - 如何避免 Android 测试应用程序中的代码重复?

build - gnu make : prerequisite is always called even when target has not changed

ios - Xcode 8.0 架构 arm64 的 undefined symbol