如何使用cmake将测试用例(googleTest)编译/链接到共享库中捆绑的代码?

时间:2015-09-18 23:02:11

标签: c++ unit-testing cmake googletest

我的项目组织如下:

  • CPP
    • main.cpp(调用来自dataStructures/common/的代码)
    • CMakeLists.txt( topmost CMakeLists文件)
    • 构建
    • 测试
      • 的main.cpp
      • 的CMakeLists.txt
      • 共同
        • 的CMakeLists.txt
        • 包括
        • SRC
      • googletest
      • 构建
    • 共同
      • CMakeLists.txt(应负责构建通用共享库)
      • 包括
        • utils.h
      • SRC
        • utils.cpp
      • 构建

build\目录包含构建的目标。实际代码可以在这里看到:https://github.com/brainydexter/PublicCode/tree/master/cpp

我可以为实际代码构建shared库(如common)。现在,我想使用GoogleTest进行测试。所以,我创建了一个test目录并将测试代码放在那里(我在repo中的内容只是一个示例,更像是hello world以使构建系统正常工作。我将添加更多测试用例稍后)。

我需要一些帮助才能从最顶层的CMakeLists.txt 触发测试。我不知道该怎么做。在test中,CMakeLists.txt看起来像这样:

cmake_minimum_required(VERSION 3.1.2)

add_subdirectory(googletest/googletest)
include_directories(googletest/googletest/include)

add_subdirectory(common)

enable_testing()

add_executable(testCpp main.cpp)
target_link_libraries(testCpp gtest gtest_main )

我是否需要添加其他内容才能在test/common中启用测试?

test/common/CMakeLists.txt

file(GLOB SOURCES "src/*.cpp")

add_executable(testCommon ${SOURCES})

target_link_libraries(testCommon cppCommon)

我不确定目标应该是可执行的还是Google测试框架可以使用的库?我很感激您的帮助。

1 个答案:

答案 0 :(得分:0)

您可能会发现FindGTest模块很有帮助。由于gtest的位置是固定的,你可以沿着这些方向做一些事情来找到它:

set (GTEST_ROOT ${CMAKE_SOURCE_DIR}/googletest)
find_package (GTest required)

至于您是否需要可执行文件,此模块定义了GTEST_MAIN_LIBRARIES变量,因此当您链接测试时,您只需执行以下操作:

target_link_libraries(testCommon ${GTEST_MAIN_LIBRARIES})

生成的二进制文件将使用默认的gtest main函数。