В CMake можно использовать add_subdirectory(foo EXCLUDE_FROM_ALL)
, чтобы исключить цели, определенные в foo
, из построенных по умолчанию , если они не нужны какой-то другой цели, например:
add_subdirectory(foo EXCLUDE_FROM_ALL)
add_custom_target(wanted_foo_targets ALL DEPENDS
bar_tool # only build bar_tool from foo
)
Предположим, foo
определяет две цели, bar_tool
и foo_tool
, и тесты для каждой из них:
add_test(NAME test_foo_tool COMMAND foo_tool)
add_test(NAME test_bar_tool COMMAND bar_tool)
Когда вы строите общий проект, foo_tool
не создается, потому что этоне зависимость от чего-либо, но bar_tool
создается, потому что это зависимость wanted_foo_targets
.
Но CTest все еще регистрирует инструмент test_foo_tool
, который теперь не работает, потому что foo_tool
не существует.
Могу ли я удалить / скрыть / пропустить тесты, которые относятся к целям, которые не были построены?Я знаю, что могу сделать команду теста примерно такой, как [ -f foo_tool ] && foo_tool
, но это будет ошибочно указывать, что тест пройден.
Бонусные баллы, если я смогу сделать это из родительского каталога, не изменяя настройки тестов внутриfoo
.В моем случае foo
- это проект, предоставленный третьей стороной, и я не хочу поддерживать патч их кода при написании новых тестов.