2017-05-28 50 views
2

我最近下载了最新的boost库以访问的boost ::花与他们的文档page,他们建议使用“FindHana.cmake模块读取将Hana设置为外部项目以供使用。“使用boost ::花与CMake的不全力助推安装(外部项目?)

我不知道这一点,所以我刚才设置的编译标志,包括我hana.hpp的头路,但我很想知道如何做到这一点的文档中建议的方式。

回答

1

在即将推出的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)。

+0

是否可以在不运行make install的情况下使用CMake和find_package(Hana)?这是添加到我最感兴趣的CMAKE_MODULE_PATH的想法。 – dabyly

+0

不,因为'make install'就是''HanaConfig.cmake'文件的放置位置,这就是'find_package'寻找的目标。这就是说,这并不意味着你需要在系统范围内安装Hana。您可以在本地安装Hana并正确传递'CMAKE_PREFIX_PATH'。例如,请参阅[dyno](https://github.com/ldionne/dyno)。 –

+0

在这个评论和这个链接之间我得到了它。 https://blogs.kde.org/2008/12/12/how-get-cmake-find-what-you-want-it – dabyly

0

在cmake的,该find_package(SomePackage)功能将运行Find<SomePackage>.cmake。在很多情况下,cmake安装中包含Find<SomePackage>.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是它自己的怪物,但有一些文件用于寻找提升here。在升压::花的情况下,你会使用FindBoost像这样:

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

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

+0

我已经制定了助推find_package业务谢天谢地。我认为我的麻烦源于我没有安装Hana,我只想包含头文件。 – dabyly

+0

如果您已经安装了boost,它包含[hana库](http://www.boost.org/doc/libs/1_64_0/libs/hana/doc/html/index.html)。你只需要'#include '和'namespace hana = boost :: hana',而不需要进一步安装任何东西。 – Stewart

+0

我的情况有点复杂,我可能会编辑我的帖子来反映这一点,但我已经“安装”的提升不是包含hana头文件的提升。我有兴趣尝试hana,因此我将最新的库下载到我的家中,而无需在此新的boost目录中运行make install,是否可以使用find_package(hana)?很抱歉,如果我要对提出这个问题,走错了路,我刚开始用栈... – dabyly