cmake之生成動態庫


演示源碼下載地址: https://github.com/mohistH/demo_cmake_dylib

把文僅為參考。 以實際情況為准

1、目錄結構

│  CMakeLists.txt
│  index.txt
│  
├─build
├─include
│      hello.h
│      hi.h
│      
└─src
        hello.cxx
        hi.cxx

2、CMakeLists.txt

cmake_minimum_required(VERSION 3.1) #項目名 project(libhello) # 1、指定庫的目錄變量 set(libhello_src src/hello.cxx) # 指定頭文件搜索路徑 include_directories("${PROJECT_SOURCE_DIR}/include") # 2、添加庫(對應的兩個項目) add_library( hello_shared SHARED ${libhello_src}) add_library( hello_static STATIC ${libhello_src}) # 按照一般的習慣,靜態庫名字跟動態庫名字應該是一致的,只是擴展名不同; # 即:靜態庫名為 libhello.a; 動態庫名為libhello.so ; # 所以,希望 "hello_static" 在輸出時,不是"hello_static",而是以"hello"的名字顯示,故設置如下 # SET_TARGET_PROPERTIES (hello_static PROPERTIES OUTPUT_NAME "hello") # 3、cmake在構建一個新的target時,會嘗試清理掉其他使用這個名字的庫, # 因此,在構建libhello.a時,就會清理掉libhello.so. # 為了回避這個問題,比如再次使用SET_TARGET_PROPERTIES定義 CLEAN_DIRECT_OUTPUT屬性。 SET_TARGET_PROPERTIES (hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) SET_TARGET_PROPERTIES (hello_shared PROPERTIES CLEAN_DIRECT_OUTPUT 1) # 4、按照規則,動態庫是應該包含一個版本號的, # VERSION指代動態庫版本,SOVERSION指代API版本。 SET_TARGET_PROPERTIES (hello_static PROPERTIES VERSION 1.1 SOVERSION 1) SET_TARGET_PROPERTIES (hello_shared PROPERTIES VERSION 1.1 SOVERSION 1) # 5、若將libhello.a, libhello.so.x以及hello.h安裝到系統目錄,才能真正讓其他人開發使用, # 本例中,將hello的共享庫安裝到<prefix>/lib目錄; # 將hello.h安裝<prefix>/include/hello目錄。 #INSTALL (TARGETS hello hello_shared LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) #INSTALL (TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) #INSTALL (FILES hello.h DESTINATION include/hello)

3、configure and generate

xxx/to/path cd build cmake ..

4、截圖:

     mac沒有電了, 來個Windows10的截圖吧:

5、其他設置

  若需要指定輸出路徑,嘗試下面的示例指令:

 

# 設置VS會自動新建Debug和Release文件夾
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Bin)

# 設置分別設置Debug和Release輸出目錄
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/../../build/Debug)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/Bin)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM