В нашем проекте мы много используем буст. Так что find_package(Boost ...) часто вызывается с разными компонентами (для разных модулей / библиотек). Это вызывает много предупреждений "Imported targets not available" (например, ДЕЙСТВИТЕЛЬНО много)
Я хочу избежать всего этого беспорядка в журналах, не заставляя всех пользователей обновлять CMake при обновлении boost. Я могу предположить, что более новые версии Boost в порядке. Но нет ничего, чтобы отключить это предупреждение или показать его только один раз.
Итак, моя идея заключалась в том, чтобы обернуть find_package(Boost ...) и просто вернуть статус. Самый простой способ создать собственный FindBoost.cmake и поместить его в CMAKE_MODULE_PATH. Но как мне тогда вызвать исходный модуль поиска ускорения? Если я снова вызову find_package(Boost ...), он, вероятно, снова вызовет тот же модуль.
Также: сбор аргументов для передачи, вероятно, будет довольно громоздким. Есть ли автоматический способ сделать это (например, ARGN для обычных функций)?
Примечание: очевидное решение использования настраиваемого макроса find_boost, который делает это, не следует рассматривать, поскольку оно включает в себя изменение всех вызывающих абонентов.
Нам все еще нужно поддерживать более старые версии Boost и CMake. Таким образом, мы используем переменные, а не импортированные цели, и сами управляем зависимостями. Последствия этих предположений должны рассматриваться каким-то образом, не связанным с этим вопросом.
Easiest way seems to create a custom FindBoost.cmake and put it in CMAKE_MODULE_PATH. But how would I then call into the original boost find-module? - восстановите CMAKE_MODULE_PATH и вызовите include(FindBoost.cmake). На самом деле, я не понимаю, зачем вам цеплять FindBoost.cmake: вы можете скопировать оригинальный скрипт в «кастомный», а message(WARNING) просто удалить из него.
@Tsyvarev Идея очень хорошая. Фактически вы можете отключить CMAKE_MODULE_PATH и восстановить его после включения. И ваш второй совет также верен, поскольку даже упаковка и установка ТИХОЙ не снимают предупреждение. Можете ли вы превратить это в ответ, чтобы я мог принять это?





Вы можете создать скрипт FindBoost.cmake, аналогичный скрипту CMake какой-либо версии, но с соответствующим
message(WARNING ...)
строки удалены.
Добавьте этот скрипт в свой проект и настройте переменную CMAKE_MODULE_PATH, чтобы найти его.
Предупреждения о повышении скорости «Импортированные цели недоступны» не могу можно отключить с помощью параметра ТИХИЙ для find_package: при поставке с CMake скрипт FindBoost.cmake не проверяет этот параметр, когда выдает эти предупреждения.
Если одному делает нужна обертка: просто unset(CMAKE_MODULE_PATH), затем include(FindBoost), а потом сбросить CMAKE_MODULE_PATH.
«Я могу предположить, что более новые версии Boost в порядке». - Это могут быть ошибки о несовпадении зависимостей между компонентами Boost, если сценарий
FindBoost.cmakeстарше версии Boost. Таким образом, игнорирование предупреждений типаImported targets not availableможет привести к неожиданному сбою компиляции / компоновки.