2017-05-28 92 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