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

时间:2017-05-28 21:54:52

标签: c++ boost cmake boost-hana

我最近下载了最新的boost库来访问boost :: hana并阅读他们的文档page,他们建议使用" FindHana.cmake模块将Hana设置为外部项目以供使用"

我无法解决这个问题所以我只是将编译标志设置为将hana.hpp包含在标题路径中,但我很想知道如何按照文档中的建议完成此操作。

2 个答案:

答案 0 :(得分:1)

在即将推出的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项目的正确方法,我最近改变了Hana的做法(现在只在develop上)。

答案 1 :(得分:0)

在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略有不同,不会使用FindHana。 Boost是它自己的怪物,但是有一些文档可以找到boost here。在boost :: hana的情况下,你可以使用FindBoost,如下所示:

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

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