2016-02-12 145 views
0

我想以靜態方式構建一個庫,並將其集成到一起(將它的所有依賴項)集成到我的項目中。目標平臺(從長遠來看)是android。目前我只想測試我的Linux(debian 64位)虛擬機在Windows主機上的整個過程。所得到的項目結構應該是這樣的cmake:如何告訴庫哪裏可以找到依賴關係

project/ 
| 
|----- thirdparty/ 
|   | 
|   |----- lib1/ (depends on 2 and 3) 
|   |----- lib2/ 
|   ----- lib3/ 
----- application/ 

LIB1是我在應用程序中使用的庫。所有庫都已經爲我的當前目標系統構建。我使用了隨庫一起提供的configure腳本。由於lib1需要lib2和lib3,所以我通過使用with-lib2-prefix=<pathof-lib2>來引用它們。我用它來建立與QtCreator鏈接應用CMake的腳本LIB1是這樣的:

ADD_LIBRARY(lib1 STATIC IMPORTED) 
SET(lib1_path ${CMAKE_SOURCE_DIR}/thirdparty/lib1/lib1.a) 
# and give path to external library with IMPORTED_LOCATION 
SET_TARGET_PROPERTIES(gpgme PROPERTIES IMPORTED_LOCATION ${lib1_path}) 

//later... 

target_link_libraries( ${COMPONENT_NAME}       
         lib1 
) 

LIB1如預期被發現,但你也許已經懷疑的依賴不會被發現。的確,我從來沒有告訴cmake如何。但是因爲我對cmake很陌生,所以我不知道這是如何完成的。

要麼我想告訴lib1在哪裏找到與cmake的lib2和lib3。或者,如果在不觸及lib1的「構建過程」的情況下這是不可能的,也許我可以設法以正確的方式從cmake調用./configure。有沒有人有類似的問題,可以給我一個建議如何使這項工作?

+0

這是否幫助https://cmake.org/cmake/help/v3.0/command/link_directories.html: link_directories($ {} CMAKE_SOURCE_DIR /第三方/ LIB2) – 2016-02-12 16:17:42

+0

我試圖ADD_LIBRARY之前加入這一行(第二次嘗試)直接在target_link_libraries之前。可悲的是,它沒有奏效。我遇到了同樣的錯誤,說「undefine reference 」 –

回答

0

我解決了這個問題。我不得不每天依賴庫添加到我的cmake的文件:

ADD_LIBRARY(lib3 STATIC IMPORTED) 
SET(lib3_path ${CMAKE_SOURCE_DIR}/thirdparty/lib3/lib/lib3.a) 
SET_TARGET_PROPERTIES(lib3 PROPERTIES IMPORTED_LOCATION ${lib3_path}) 

ADD_LIBRARY(lib2 STATIC IMPORTED) 
SET(lib2_path ${CMAKE_SOURCE_DIR}/thirdparty/lib2/lib/lib2.a) 
SET_TARGET_PROPERTIES(lib1 PROPERTIES IMPORTED_LOCATION ${lib2_path}) 

ADD_LIBRARY(lib1 STATIC IMPORTED) 
SET(lib1_path ${CMAKE_SOURCE_DIR}/thirdparty/lib1/lib/lib1.a) 
SET_TARGET_PROPERTIES(lib2 PROPERTIES IMPORTED_LOCATION ${lib1_path}) 

,然後按照正確的順序將它們鏈接:

target_link_libraries( ${COMPONENT_NAME}       
         lib1 
         lib2 
         lib3 
) 

如果lib1內所鏈接的鏈接之前鏈接鏈接2和LIB3將「優化lib2和3離開「。

相關問題