Выход единицы измерения и совет по структуре проекта - CMake + Google Test Framework

Я новичок в CMake и использую Google Test Framework. Я искал более сложные примеры объединения CMake и фреймворка тестирования Google, но мне не очень повезло. Я надеялся, что кто-нибудь сможет высказать свое мнение об установке, к которой я пришел, и ответить на мой вопрос. Вот базовая структура проекта:

ProjectFolder
. -CMakeLists.txt
/строить
/include
  все мои .h-файлы
/src
  -CMakeLists.txt
  все мои .cpp-файлы
/тесты
  -CMakeLists.txt
  /gtest
    -Google's CMakeLists.txt
  /макеты
    -CMakeLists.txt
    -cpp и h файлы для mocks

В двух словах корневой cmake файл добавляет src и тесты в качестве подкаталогов. Файл src cmake содержит cpp-файлы в библиотеке. Файл cmake test добавляет mocks и gtest в качестве подкаталогов. Файл mock cmake содержит все cpp-файлы во второй библиотеке. Наконец, файл cmake в папке tests связывает библиотеку src, библиотеки google и библиотеки mocks с исполняемыми файлами юнит-тестов.

В итоге я получаю несколько исполняемых файлов: objA_unittest, objB_unittest и т.д.

Несколько вещей:

  1. Чтобы собрать все это и при этом сохранить каталог моего проекта достаточно чистым, я помещаю cd в папку build и запускаю "cmake ...". Похоже, что это очень хорошо работает, и я планировал настроить vim так, чтобы он всегда запускал make из этой папки. У кого-нибудь есть какие-нибудь подсказки или проблемы с этим подходом?

  2. Мне не нравится идея вложить библиотеку Google в папку моего проекта (особенно, если в конце концов у меня есть несколько проектов, которые ее используют), но, как мне кажется, настоятельно рекомендуется не прекомпилировать библиотеки Google, и я не вижу способа обойти это. Однако, если кто-нибудь знает лучший способ, я был бы рад это услышать.

  3. Запуск тестов. Мне нравится, что все, что мне нужно сделать, это запустить "make test", чтобы выполнить все мои юнит-тесты с помощью ctest. Однако, я обнаружил, что мне не очень нравится вывод. Каждый исполняемый модуль юнит-теста содержит несколько различных юнит-тестов. Запуск их напрямую обеспечивает очень многогранную обратную связь с Google. Если один из тестов в исполняемом файле дает сбой, я точно знаю, какой именно тест дает сбой и почему. Раньше я использовал makefile, а в конце makefile просто выполнял все тесты. Сначала я попытался исправить это, создав пользовательскую цель сборки в cmake. Однако она выполняет только первую команду. Мне либо нужен способ получить более подробный результат от CTest, либо мне нужен способ автоматического вывода bash скрипта или чего-то подобного от CMake для выполнения каждого исполняемого модуля юнит-теста. Другими словами, сейчас у меня настроен файл cmake, поэтому мне нужно добавить юнит-тест только в одном месте для генерации исполняемого файла, и мне не нужно запоминать, что нужно добавлять его на второе место, если я могу избежать этого. Есть ли у кого-нибудь опыт, который был бы полезен в этом вопросе?

Спасибо большое заранее.

19
задан Landon 31 August 2011 в 21:44
поделиться