還是習慣偷懶不看 document ,害我花了半天時間!看了許多教學文件,似乎對使用額外的 static lib 並沒有著墨太多?感覺 cmake 因為太方便了,以至於整個專案都可以全部從 source code 慢慢地編出來嗎?
在此做個簡單的筆記!關於想將自己私下開發的 static lib 引進 cmake 使用。假設目前有一個開發好的 static lib ,其名為 libtest_lib.a 並擺在 /path/mylib/libtest_lib.a 。
在 cmake 使用,需用兩行敘述:
ADD_LIBRARY ( test_lib STATIC IMPORTED )
SET_PROPERTY ( TARGET test_lib PROPERTY IMPORTED_LOCATION /path/mylib/libtest.a )
最後,在使用上才可以:
TARGET_LINK_LIBRARIES ( demo_test test_lib )
原先是打算想擺在相對路徑的,目前尚未試出來。
另外,若有 error: xxx.h: No such file or directory 請記得用 INCLUDE_DIRECTORIES 加好 static lib 的 header file ,而出現 /usr/bin/ld: cannot find -lxxx_staitc_lib 則是用上頭的解法。
對於想使用相對路徑的方式:
目錄結構:
MyProject
- lib/ (擺放相關 lib 的位置)
- src/
- CMakeLists.txt
CMakeLists.txt:
PROJECT ( "MyProject" )
SET ( EXECUTABLE_OUTPUT_PATH ${MyProject_BINARY_DIR}/bin )
SET ( LIBRARY_OUTPUT_PATH ${MyProject_BINARY_DIR}/lib )
INCLUDE_DIRECTORIES ( include )
ADD_LIBRARY ( myprojectlib src/myproject.c )
ADD_LIBRARY ( otherlib STATIC IMPORTED )
SET_PROPERTY ( TARGET otherlib PROPERTY IMPORTED_LOCATION ${MyProject_SOURCE_DIR}/lib/libotherlib.a )
ADD_EXECUTABLE ( myproject_tool src/myproject_tool.c )
TARGET_LINK_LIBRARIES ( myproject_tool myprojectlib otherlib )
解法可以用善用 ${MyProject_SOURCE_DIR} 資訊來指定。
參考資料:CMake 2.6 Documentation - add_library & CMake 2.6 Notes - Importing_Targets
感蝦力XD 不過 find library script 比較靈活的感覺
回覆刪除