CMake и CTest: как заставить цель "Nightly" на самом деле строить тесты - PullRequest
2 голосов
/ 20 июля 2010

Это хорошо известная проблема, что выполнение make "test" не создает тесты, как обсуждено здесь .Как и предполагалось, проблему можно частично решить с помощью искусственной целевой «проверки».Я хочу знать, как я могу форсировать создание тестов, когда я называю «make Nightly».

Что я сделал до сих пор:

  add_custom_target(buildtests)
  add_custom_target(check COMMAND "ctest")
  add_dependencies(check buildtests)
  add_dependencies(Nightly buildtests)

  add_dependencies(buildtests Test1)
  ...
  add_dependencies(buildtests TestN)

Теперь «make check» создает прогонытесты, но "make Nightly"

  • создает тесты
  • обновляет репозиторий до CTEST_NIGHTLY_START_TIME
  • создает все другие цели
  • запускаетсейчас устарели) тесты

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Вы правы, это была моя вина за то, что я позвонил:

add_subdirectory(test EXCLUDE_FROM_ALL)

Решением было изменить его на

if(LEAVE_TEST_IN_ALL_TARGET) 
  add_subdirectory(test) 
else() 
  add_subdirectory(test EXCLUDE_FROM_ALL) 
endif() 

, а затем позвоните

cmake ${SRC_DIR} -DLEAVE_TEST_IN_ALL_TARGET=ON make Nightly
1 голос
/ 18 августа 2010

Если вы посмотрите на вывод,

cmake --help-command add_custom_target

В нем упоминается аргумент ALL: «Если указана опция ALL, это означает, что эта цель должна быть добавлена ​​к цели сборки по умолчанию, чтобы она запускалась каждый раз». Вам нужно будет добавить этот аргумент к вашей пользовательской цели, и цель Nightly запускает make, чтобы собрать все в целевой сборке по умолчанию. Таким образом, следующее должно сделать это,

add_custom_target(buildtests)

Другой вариант - написать собственный скрипт CTest, который даст вам более точный контроль над сборкой и тестированием вашего проекта.

...