CMake: цель "test" не создает тесты, цель "all" делает - PullRequest
0 голосов
/ 26 сентября 2018

Я создал переносимую индустриальную агностическую систему сборки на основе сценариев, полезную для быстрой сборки нескольких зависимых проектов, без необходимости полагаться на конкретную IDE или фабрику сборки.Это агностик, потому что он не основан на одном движке сборки.Я основал первую версию, используя cmake, потому что мои проекты в основном C ++, но это будет развиваться (например, включать gradle или что-то еще).То есть я не сосредоточен на CMake, это всего лишь инструмент для достижения цели, легкое портативное создание проекта C ++.Раньше я имел в виду BJam и сохранил бы его, если бы было больше документации.

В результате я очень зависим от CMake в выполнении сборки и модульных тестов.На сегодняшний день я понял, что тесты создаются под целью «all» и выполняются под целью «test».

С CMake 2- (и - здесь, например, генератор сборочных файлов Unix):

make all  # Build project AND tests
make test # Run tests

С CMake 3+ и любым генератором:

cmake --build . --target all  # Build project AND tests
cmake --build . --target test # Run tests

Я хотел бы знать, если бы кто-то знал способ разделить фазу «проекта сборки» отдельно от «тестов сборки»'фаза (также потому, что в моей сборочной системе более естественно присоединиться к сборке тестов и запуску тестов, чем наоборот).

Важная точность: я не хочу загружать проект с одного или другого видения(щелкнув BUILD_TESTING).Идея заключалась бы в том, чтобы иметь 3 этапа, например:

cmake --build . --target <project>     # 1. Build project only
cmake --build . --target <build_tests> # 2. Build tests
cmake --build . --target <run_tests>   # 3. Run tests

Если я решу не запускать тесты, я могу перейти сразу от этапа 1 к установке, но запуск этапа 3 вызовет предыдущие зависимые этапы.

Есть подсказка?(Если нет, я подозреваю, что мне придется напрямую спросить разработчиков CMake ...)

Заранее спасибо.Привет.

1 Ответ

0 голосов
/ 26 сентября 2018

Предполагается, что вы выбрали build_tests цель для исполняемых файлов теста сборки и run_tests цель для их запуска:

  1. Определение целей:

    add_custom_target(build_tests)
    # 'run_tests' triggers 'ctest'.
    add_custom_target(run_tests COMMAND ${CMAKE_CTEST_COMMAND})
    # 'run_tests' implies 'build_tests'
    add_dependencies(run_tests build_tests)
    
  2. Создание исполняемых файлов теста, поэтому они не будут создаваться по умолчанию, но с целью build_tests.

    # Do not build 'test1' by default
    add_executable(test1 EXCLUDE_FROM_ALL ...)
    # 'build_tests' implies (among other things) building 'test1'
    add_dependencies(build_tests test1)
    
...