【cmake】add_library


 生成動態庫或靜態庫

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2 ...])

STATIC: 生成靜態庫

SHARED: 生成動態庫

EXCLUDE_FROM_ALL:add_library, add_executable, add_subdirectory等命令都有一個EXCLUDE_FROM_ALL參數. 作用就是如果某個target或subdirectory被設置為EXCLUDE_FROM_ALL屬性, 那么這個target(或這個subdirectory中的所有target)就會被排除在all target列表之外,這樣,當執行默認的make時,這個target(或這個subdirectory中的所有target)就不會被編譯。

 

 

1. 測試用例

 add_library(sub src/sublib1.cpp)

 說明: 當不指明庫的類型時,生成靜態sub。

 

2. 測試用例

add_library(cmimpl SHARED ${CMIMPL_SOURCE_FILES})
add_library(cmjnidrv SHARED ${JNI_SOURCE_FILES})

# fctest指定了EXCLUDE_FROM_ALL 屬性,不會自動編譯,只能手動編譯
add_executable(fctest EXCLUDE_FROM_ALL FeatureCompareSpeedTest.cpp)

 說明:加了EXCLUDE_FROM_ALL屬性的target在默認編譯時不會被編譯,如果要編譯,需要手動編譯, 比如make fctest指定編譯名為fctest

 

用例2:

導入已經生成的庫

add_library(<name> <type> IMPORTED [GLOBAL])

 

創建接口庫

add_library(<name> INTERFACE [IMPORTED [GLOBAL]])

 這類庫有屬性,能install()exportimported,但可能沒有build過程。像純頭文件庫完全針對target的設計(這條參見interface libraries



為庫起別名

為給定library添加一個別名,后續可使用 <name> 來替代 <target>

add_library(<name> ALIAS <target>)

使用有如下限制:

    1. <target>不能是ALIAS

    2. 可用於判斷target是否存在、鏈接。

    3. ALIAS的library不能修改屬性,不能調用set_property(), set_target_properties()和target_link_libraries()等方法

    4. 不能用於install()

 

 

參考資料

1. cmake : add_library詳解

2. cmake官方文檔

3. cmake:EXCLUDE_FROM_ALL的用處


免責聲明!

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



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