【问题标题】:how do i compile/link test cases (googleTest) using cmake to the code bundled up in shared library?如何使用 cmake 将测试用例 (googleTest) 编译/链接到捆绑在共享库中的代码?
【发布时间】:2015-12-16 05:00:15
【问题描述】:

我的项目是这样组织的:

  • cpp
    • main.cpp(从dataStructures/common/调用代码)
    • CMakeLists.txt(最顶层 CMakeLists 文件)
    • 构建
    • 测试
      • main.cpp
      • CMakeLists.txt
      • 常见
        • CMakeLists.txt
        • 包括
        • 源代码
      • 谷歌测试
      • 构建
    • 常见
      • CMakeLists.txt(应该负责构建公共共享库)
      • 包括
        • utils.h
        • 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 测试框架可以使用的库?我将不胜感激。

【问题讨论】:

标签: c++ unit-testing cmake googletest


【解决方案1】:

您可能会发现FindGTest 模块很有帮助。由于 gtest 的位置是固定的,您可以按照以下方式进行查找:

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

至于你是否需要一个可执行文件,这个模块定义了GTEST_MAIN_LIBRARIES变量,这样当你链接你的测试时,你只需要这样做:

target_link_libraries(testCommon ${GTEST_MAIN_LIBRARIES})

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

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 2018-03-04
    • 2012-05-22
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多