В моем CMakeLists.txt у меня есть что-то вроде этого:
set_property(TEST testX APPEND PROPERTY DEPENDS testY)
set_property(TEST testX APPEND PROPERTY DEPENDS testZ)
И я хочу как-нибудь запустить testX
и все его зависимости автоматически.
Что-то вроде:
ctest <options> testX
и в результате CTest будет работать textY
, testZ
а также testX
,
Есть какой-либо способ сделать это?
Или, если сейчас это невозможно, есть ли способ извлечь информацию о зависимостях из каталога сборки CMake по сценарию?
Насколько я знаю, нет встроенного способа сделать это.
Лучший способ достичь вашей цели — использовать LABELS
имущество на тестах. Вы можете получить список зависимостей, используя get_property
или же get_test_property
и применить тот же ярлык к testX
и каждый из его зависимых тестов:
get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)
Затем вы можете указать CTest запускать тесты только с этой меткой:
ctest -L LabelX
Поддержка тестовых светильников была добавлена в CMake 3.7, и они делают именно то, что вы хотите. Ваш конкретный сценарий будет реализован так:
set_property(TEST testX PROPERTIES FIXTURES_REQUIRED Foo)
set_property(TEST testY PROPERTIES FIXTURES_SETUP Foo)
set_property(TEST testZ PROPERTIES FIXTURES_SETUP Foo)
Вы можете спросить ctest
просто бегать testX
и он автоматически добавит testY
а также testZ
к набору тестов, которые необходимо выполнить:
ctest -R testX
Это также гарантирует, что testX
будет работать только после testY
а также testZ
были пройдены. Если любой из testY
или же testZ
выходит из строя, testX
будут пропущены Новые опции -FS
, -FC
а также -FA
были также добавлены к ctest
в CMake 3.9, которые позволяют автоматически добавлять тесты настройки / очистки прибора на ctest
командная строка. Например, чтобы временно пропустить добавление testY
к тестовому набору, но все равно автоматически добавляется testZ
можно сделать это:
ctest -R testX -FS testY
Свойства приборов описаны в CMake документы и в следующей статье мы расскажем об особенностях светильников:
https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/