使用 boost::hana 和 CMake 没有完整的提升安装(外部项目?)

Using boost::hana and CMake without full boost install (external project?)

我最近下载了最新的 boost 库以访问 boost::hana 并阅读了他们的文档 page,他们建议使用 "FindHana.cmake module to setup Hana as an external project for use."

我想不通所以我只是设置编译标志以将我的 hana.hpp 包含到 header 路径中,但我很想知道如何按照建议的方式完成此操作在文档中。

在cmake中,find_package( SomePackage )函数会运行Find<SomePackage>.cmake。在很多情况下 Find<SomePackage>.cmake 包含在 cmake 安装中。如果没有,那么您需要将该文件添加到项目结构中并将该文件的路径附加到 CMAKE_MODULE_PATH.

我快速搜索找到 this。在那种情况下,这就是您使用它的方式:

find_package( Hana )

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

如果脚本未设置 ${Hana_FOUND},您可以设置 Hana_ROOTHana_INSTALL_PREFIX 以便脚本更好地提示在哪里可以找到它。


你也提到了boost。 Boost 略有不同,不会使用 FindHana。 Boost 是它自己的怪物,但是有一些文档可以找到 boost here。在 boost::hana 的情况下,您可以像这样使用 FindBoost

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

如果你有问题,你可以尝试设置BOOST_INCLUDEDIRBOOST_ROOT来帮助cmake找到你的安装。

在即将推出的 Boost 版本中,Hana 提供了一个名为 HanaConfig.cmake 的文件,当您键入 make install 时,它会自动安装在 <install-prefix>/lib/cmake/hana/HanaConfig.cmake 中。然后,如果您的 <install-prefix>CMAKE_PREFIX_PATH 的一部分(如果您将其安装到默认的系统范围位置,就会出现这种情况),您只需要:

find_package(Hana)
target_link_libraries(some-target hana)

这会将正确的包含目录添加到 some-target。这是依赖其他 CMake 项目的正确方式,鉴于此,我最近更改了 Hana 的方式(目前仅在 develop 上)。