Недавно я скачал новейшую библиотеку Boost, чтобы получить доступ к boost :: hana и прочитал их документацию страницу, в которой они предлагают использовать модуль« FindHana.cmake »для настройки Hana в качестве внешнего проекта для использования».

Я не мог понять это, поэтому я просто установил флаги компиляции, чтобы включить мой hana.hpp в путь заголовка, но я хотел бы знать, как сделать это способом, предложенным в документации.

2
dabyly 29 Май 2017 в 00:54

2 ответа

Лучший ответ

В следующих версиях Boost Hana предоставляет файл с именем HanaConfig.cmake, который устанавливается в <install-prefix>/lib/cmake/hana/HanaConfig.cmake автоматически при вводе make install. Затем, если ваш <install-prefix> является частью CMAKE_PREFIX_PATH (что будет иметь место, если вы установите его по умолчанию в общесистемном расположении), вам просто нужно:

find_package(Hana)
target_link_libraries(some-target hana)

Это добавит право включать каталоги в some-target. Это правильный способ зависеть от других проектов CMake, и я изменил способ Ханы сделать это недавно (только develop прямо сейчас) в свете этого.

1
Louis Dionne 29 Май 2017 в 22:33

В cmake будет запущена функция find_package( SomePackage ) Find<SomePackage>.cmake. Во многих случаях Find<SomePackage>.cmake включен в установку cmake. Если нет, то вам нужно добавить этот файл в структуру вашего проекта и добавить путь к этому файлу в CMAKE_MODULE_PATH.

Я сделал быстрый поиск, чтобы найти этот. В таком случае, вот как вы бы это использовали:

find_package( Hana )

if ( ${Hana_FOUND} )
  include_directories( ${Hana_INCLUDE_DIRS} )
endif()

Если ${Hana_FOUND} не установлен сценарием, вы можете установить Hana_ROOT или Hana_INSTALL_PREFIX, чтобы дать сценарию лучшие подсказки о том, где его найти.


Вы также упоминаете повышение. Повышение немного отличается и не будет использовать FindHana. Boost - это его собственный монстр, но здесь есть некоторая документация для того, чтобы найти повышение здесь . В случае boost :: hana вы бы использовали FindBoost следующим образом:

find_package(Boost)
if ( ${Boost_FOUND} )
  include_directories( ${Boost_INCLUDE_DIRS} )
endif()

Если у вас есть проблемы, вы можете попробовать установить BOOST_INCLUDEDIR и BOOST_ROOT, чтобы помочь cmake найти вашу установку.

0
rubenvb 29 Май 2017 в 21:21