日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下CMake简明教程(六)动态库和静态库的编译控制

發布時間:2025/4/5 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下CMake简明教程(六)动态库和静态库的编译控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼在git
有時只需要編譯出動態庫和靜態庫,然后等著讓其它程序去使用。讓我們看下這種情況該如何使用cmake。首先按照如下重新組織文件,只留下testFunc.h和TestFunc.c

├── CMakeLists.txt ├── lib └── testFunc├── testFunc.c└── testFunc.h

我們會在build目錄下運行cmake,并把生成的庫文件存放到lib目錄下。
CMakeLists.txt內容如下,

cmake_minimum_required (VERSION 3.5)project (demo)set (SRC_LIST ${PROJECT_SOURCE_DIR}/testFunc/testFunc.c)add_library (testFunc_shared SHARED ${SRC_LIST}) add_library (testFunc_static STATIC ${SRC_LIST})set_target_properties (testFunc_shared PROPERTIES OUTPUT_NAME "testFunc") set_target_properties (testFunc_static PROPERTIES OUTPUT_NAME "testFunc")set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
  • add_library: 生成動態庫或靜態庫(第1個參數指定庫的名字;第2個參數決定是動態還是靜態,如果沒有就默認靜態;第3個參數指定生成庫的源文件)

cmake之 ADD_LIBRARY()

SHARED,動態庫STATIC,靜態庫MODULE,在使用 dyld 的系統有效,如果不支持 dyld,則被當作 SHARED 對待。
  • set_target_properties: 設置最終生成的庫的名稱,還有其它功能,如設置庫的版本號等等

  • LIBRARY_OUTPUT_PATH: 庫文件的默認輸出路徑,這里設置為工程目錄下的lib目錄
    前面使用set_target_properties重新定義了庫的輸出名稱,如果不使用set_target_properties也可以,那么庫的名稱就是add_library里定義的名稱,只是連續2次使用add_library指定庫名稱時(第一個參數),這個名稱不能相同,而set_target_properties可以把名稱設置為相同,只是最終生成的庫文件后綴不同(一個是.so,一個是.a),這樣相對來說會好看點。

  • .a是靜態庫

  • .o 是動態庫

總結

以上是生活随笔為你收集整理的Linux下CMake简明教程(六)动态库和静态库的编译控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。