如何将本地 Qt 项目与 Google 测试集成?

How do I integrate a local Qt project with Google Test?

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

Google 目前使用 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 测试的方式):

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      ""
)

此外,如果这是测试项目的困难方法,请告诉我。我希望使用 google 测试,但如果这不起作用可能会使用 Qt 测试。我是 C++ 的新手,也是 C++ 单元测试的新手(熟悉 Java 和 JUnit)。非常感谢任何帮助,谢谢!

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

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