【问题标题】:How do I integrate a local Qt project with Google Test?如何将本地 Qt 项目与 Google Test 集成?
【发布时间】:2023-08-03 16:26:01
【问题描述】:

我正在尝试将 Google Test 集成到我的 Qt 项目中。我使用 Google Test 运行基本的 (EXPECT_EQ(1, 1)) 测试,但我很困惑如何将我的 Qt 项目(使用 qmake)集成到测试的 CMake 构建中。

Google Test 目前是使用他们的README 中推荐的CMakeLists.txt 添加的。我想添加我的本地 src 并构建到测试版本。我的 src 位于(相对于测试文件夹)../src/,我已经将 src 构建到(相对于测试文件夹)build/project-build/,但我相信它不会集成,因为该项目有 .pro。当我尝试将其集成为子目录时的错误:

CMake Error at CMakeLists.txt:31 (add_subdirectory):
  The source directory

    /home/project/src

  does not contain a CMakeLists.txt file.

这就是我将它作为子目录和项目添加到我的CMakeLists.txt 的方式:

add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/../../src
                 ${CMAKE_CURRENT_BINARY_DIR}/project-build
                 EXCLUDE_FROM_ALL)

在单独的CMakeLists.txt.in 中(类似于google test 的做法):

include(ExternalProject)
ExternalProject_Add(project
  GIT_REPOSITORY    "${CMAKE_CURRENT_BINARY_DIR}/../.."
  GIT_TAG           master
  SOURCE_DIR        "${CMAKE_CURRENT_BINARY_DIR}/../../src"
  BINARY_DIR        "${CMAKE_CURRENT_BINARY_DIR}/project-build"
  CONFIGURE_COMMAND ""
  BUILD_COMMAND     ""
  INSTALL_COMMAND   ""
  TEST_COMMAND      ""
)

另外,如果这是测试项目的困难方法,请告诉我。我希望使用谷歌测试,但如果这不起作用可能会使用 Qt 测试。我对 C++ 和 C++ 单元测试相当陌生(熟悉 Java 和 JUnit)。非常感谢您的帮助,谢谢!

【问题讨论】:

    标签: qt cmake googletest qmake


    【解决方案1】:

    使用add_subdirectory() 时,您必须在添加的源子目录(调用的第一个参数)中有一个CMakeLists.txt 文件。此目录通常包含要构建的代码文件,但它们将由 CMake 构建,而不是 qmake。因为您尝试混合使用两种构建方法,所以有几个选项可以尝试简化操作:

    1. 您可以先使用 CMake 构建 Google Test 框架,然后使用 qmake 将相关的 GTest 包含/库拉入您的本地 src 构建中。有一个不错的示例 here 更详细地记录了一些步骤。
    2. 根据本地 src 的大小/范围,您可以将 Qt 项目转换为使用 cmake 构建,而不是 qmake。有一些有用的答案 herehere 来演示如何将 qmake 项目转换为 CMake 项目。这样,CMake 可以处理 Google 测试和本地 src 构建。
    3. 采用您建议的方法,并使用 Qt 的内置测试框架,而不是 Google 测试框架。

    【讨论】:

    • 谢谢!这就说得通了。我想我会尝试 Qt 的测试框架。除了社区似乎更喜欢它之外,我没有任何主要的驱动程序来使用 Google Test。我支持你,但没有足够的声誉来展示它。非常有帮助的答案,谢谢!