Как интегрировать локальный проект Qt с Google Test? - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь интегрировать Google Test в мой проект Qt. У меня есть базовые (EXPECT_EQ(1, 1)) тесты, работающие с Google Test, но я не совсем понимаю, как интегрировать свой проект Qt (использующий qmake) в сборку CMake теста.

В настоящее время Google Test добавляется с использованием рекомендованного CMakeLists.txt от их README . Я хотел бы добавить свой локальный src и build в тестовую сборку. Мой 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 Test, но если это не сработает, вероятно, будет использовать Qt Test. Я довольно новичок в C ++ и новичок в модульном тестировании C ++ (я знаком с Java и JUnit). Буду признателен за любую помощь, спасибо!

1 Ответ

0 голосов
/ 16 октября 2019

При использовании add_subdirectory() необходимо иметь файл CMakeLists.txt в добавленном исходном подкаталоге (первый аргумент вызова). Этот каталог обычно содержит файлы кода для сборки, но они будут созданы CMake, а не qmake. Поскольку вы пытаетесь смешать два подхода к сборке, есть несколько вариантов, которые можно упростить:

  1. Сначала вы можете построить каркас Google Test с помощью CMake, а затем вставить соответствующие GTest-включения / библиотеки вваша локальная сборка src с qmake впоследствии. Вот хороший пример здесь , где более подробно описаны некоторые шаги.
  2. В зависимости от размера / области действия вашего локального src, вы можете преобразовать свой проект Qt в сборку с cmakeвместо qmake. Есть несколько полезных ответов здесь и здесь , чтобы продемонстрировать, как преобразовать qmake проекты в проекты CMake. Таким образом, CMake может обрабатывать Google Test и локальные сборки src.
  3. Воспользуйтесь предложенным подходом и используйте встроенную среду тестирования Qt вместо платформы Google Test.
...