生成動態庫或靜態庫
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()
,export
和imported
,但可能沒有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()