LINUX.ORG.RU

Можно ли не собирать тесты в cmake в релизе?

 


0

1

Собственно, гуглил, смотрел как добавлять тесты. Но они собираются всегда. А запускать их нужно вообще отдельной утилитой. Есть ли пути пофиксить это или проще взять другую систему сборки? Кстати, какую?

А какой смысл не собирать тесты в релизе? Их там как и надо собирать. А запускаются они вообще-то по make test

Begemoth ★★★★★
()

Конечно.

Добавляешь пустой таргет tests (название по своему усмотрению). На таргеты тестов навешиваешь свойство EXCLUDE_FROM_ALL. Таргет tests делаешь зависимым от всех таргетов тестов (add_dependencies).

В этом случаи бинарники тестов по умолчанию не собираются. Для их сборки явно указываешь нужную цель: cmake –build . –target tests (или собрать все: –target all).

Для запуска тестов у CMake есть утилитка ctect. Тесты для этого регистрируются командой add_test.

И да, в релизной сборке тесты все же нужно собирать/запускать.

dvetutnev
()
Последнее исправление: dvetutnev (всего исправлений: 1)
if (CMAKE_CROSSCOMPILE)
  set(BUILD_TESTING OFF CACHE BOOL "")
endif ()
include(CTest)
add_test(...)

Дальше пользователь сам вырубит, если не нужно будет. Ну или по CMAKE_BUILD_TYPE смотри. Только с multiconfig генераторами(или как их там) не прокатит

DllMain
()
Ответ на: комментарий от dvetutnev

Конечно не нужна, как и EXCLUDE_FROM_ALL и прописывание зависимостей вручную

DllMain
()
Ответ на: комментарий от DllMain

Ну можно еще проще сделать, вынести сборку тестов в отдельную директорию со своим CMakeLists.txt и в зависимости от опции установленной пользователем подключать или не подключать ее.

dvetutnev
()
Ответ на: комментарий от DllMain

Да понял я, понял. Но это не отменяет того, что опцию BUILD_TESTING нужно переключать. А это не всегда удобно. Иногда проще явно скомандовать «собрать тесты», без изменения переменных.

dvetutnev
()
Последнее исправление: dvetutnev (всего исправлений: 2)
Ответ на: комментарий от dvetutnev

Поинт в том, что BUILD_TESTING - стандартная опция, и собирающему не придётся ковыряться в скриптах сборки, чтобы узнать каким образом управлять сборкой тестов. Для внутреннего продукта не так важно, но если сырцы выпускаются в лапы неискушённых пользователей/разработчиков, ничего кроме самого настоящего батхерта это им не доставит

DllMain
()
Ответ на: комментарий от DllMain

Дописать в README одну строчку с командой cmake –build . –target tests не вариант?)

А как не особо искушенный пользователь я предпочитаю смотреть конфиги Travis/AppVeyor. По ним сразу ясно как собирать и запускать тесты.

Вкусовщина все это.

dvetutnev
()
Последнее исправление: dvetutnev (всего исправлений: 2)

Тесты должны запускаться всегда: хоть в дебаге, хоть в релизе. Простейший пример - добавил ты дебажный вывод в модуль, оперирующий потоками выполнения и приехали: поведение его у тебя будет меняться в зависимости от того сработал вывод или нет.

А вот когда пишешь сценарий для сборки пакета, тесты можно там и отключить.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от Begemoth

А какой смысл не собирать тесты в релизе?

Не тратить время на сборку тестов.

Их там как и надо собирать.

Но зачем? Разве запуска тестов в дебаге не достаточно?

andalevor ★★★
() автор топика
Ответ на: комментарий от Begemoth

Точнее даже так - это дебаговские сборки можно в основном не делать, а собирать по умолчанию в RelWithDebInfo.

Begemoth ★★★★★
()
Ответ на: комментарий от andalevor

По хорошему, тестировать надо то, что ты отдаёшь пользователю. Ты сейчас пытаешься улучшить то, что не требует улучшений. Лучше на написание нормальной установки и сборки пакетов время потрать

DllMain
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.