繁体   English   中英

如何配置CMake文件以与Google Test和CTest一起使用?

[英]How do I configure my CMake file to work with Google Test and CTest?

我正在尝试将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

顶级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)

lib,用于保存逻辑代码:

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)

您应该添加测试可执行文件,就像添加目标aura并包含gtest包含项和链接gtest库一样。

将以下行添加到您的CMakeLists.txt:

include_directories(3rdparty/gtest/include)
link_directories(3rdparty/gtest/lib)

add_executable(moduleTest1 moduleTest1.cpp)
target_link_libraries(moduleTest1 gtest)

如果子模块还有其他链接,则也应链接它们。 例如,如果需要target_link_libraries(moduleTest1 gtest module1)链接,例如target_link_libraries(moduleTest1 gtest module1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM