В проекте у меня есть внешняя зависимость (библиотека). Это необязательно, но вряд ли уже будет в системе и может сильно измениться.
Итак, я сделал библиотеку find_package, и если она не была найдена (включая конкретную версию), я загружаю ее с Github и вызываю add_subdirectory (загрузка гарантирует, что версия верна)
Однако это может привести к сбою из-за неудовлетворенных зависимостей этой библиотеки, из-за которой происходит сбой всей сборки.
Есть ли способы попытаться включить подкаталог и отловить сбой без сбоя сборки?
Примечание: сбой исходит от find_package(...REQUIRED) в субмодуле.





Вы можете изменить CMakeLists.txt подпакета, чтобы проверить, создается ли он как часть другого проекта, а затем аккуратно обработать его неудовлетворенные зависимости.
Чтобы проверить это, используйте
if ( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
# standalone build
else()
# build as subdirectory of main project
endif ()
Чтобы вернуться раньше, попробуйте возвращение().
Если вы не можете изменить подпакет, единственный способ, который я вижу, - это проверить все его зависимости в основном файле CMakeLists.txt и, только если все они выполнены, вызвать add_subdirectory().
Я тоже об этом думаю. Этот трюк действительно очень полезен и уже используется для тестов. Но да, я не могу изменить зависимость, и искать все ее зависимости непрактично. Если нет другого решения, я добавлю это в качестве опции (если опция установлена, включить / потребовать зависимость)