一個簡單的cmake例子CMakeLists.txt,生成動態庫文件,可以指定發布目錄。
尚不支持:
1、交叉編譯環境配置
2、添加依賴庫
1 #在當前目錄新建一個build目錄,然后cd build;cmake .. 2 #這樣的好處是,可以將cmake生成的內容,和源碼文件分離 3 4 #定義好版本需求 5 cmake_minimum_required (VERSION 2.6) 6 #工程名字 7 project (Libtree) 8 #編譯結果發布路徑 9 set ( CMAKE_INSTALL_PREFIX ./_install) 10 11 ## The version number. 12 set (Tutorial_VERSION_MAJOR 1) 13 set (Tutorial_VERSION_MINOR 0) 14 15 #設置源碼文件,分別是avl.c rb.c splay.c 16 set (LIBHELLO_SRC avl.c rb.c splay.c) 17 18 #動態庫 19 ADD_LIBRARY (tree SHARED ${LIBHELLO_SRC}) 20 #靜態庫 21 ADD_LIBRARY (tree_static STATIC ${LIBHELLO_SRC}) 22 23 SET_TARGET_PROPERTIES (tree_static PROPERTIES OUTPUT_NAME "tree") 24 GET_TARGET_PROPERTY (OUTPUT_VALUE tree_static OUTPUT_NAME) 25 MESSAGE (STATUS "This is the tree_static OUTPUT_NAME: " ${OUTPUT_VALUE}) 26 27 # cmake在構建一個新的target時,會嘗試清理掉其他使用這個名字的庫, 28 # 因此,在構建libtree.a時,就會清理掉libtree.so. 29 # 為了回避這個問題,比如再次使用SET_TARGET_PROPERTIES定義 CLEAN_DIRECT_OUTPUT屬性。 30 SET_TARGET_PROPERTIES (tree_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) 31 SET_TARGET_PROPERTIES (tree PROPERTIES CLEAN_DIRECT_OUTPUT 1) 32 33 # 按照規則,動態庫是應該包含一個版本號的, 34 # VERSION指代動態庫版本,SOVERSION指代API版本。 35 SET_TARGET_PROPERTIES (tree PROPERTIES VERSION ${Tutorial_VERSION_MAJOR}.${Tutorial_VERSION_MINOR} SOVERSION 1) 36 38 #在本例中我們將tree的共享庫安裝到<prefix>/lib目錄; 39 # 將libtree.h安裝<prefix>/include/tree目錄。 40 41 INSTALL (TARGETS tree tree_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) 42 INSTALL (FILES libtree.h DESTINATION include/tree)