2009年3月9日 星期一

[CMake] Import/link a static library

還是習慣偷懶不看 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


1 則留言:

  1. 感蝦力XD 不過 find library script 比較靈活的感覺

    回覆刪除