CMake4-指令1-2: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

二、导入已经生成的库

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()




https://cmake.org/cmake/help/v3.22/command/add_library.html

https://www.cnblogs.com/sunbines/p/16147873.html

cmake : add_library详解_cmake add library-优快云博客

1. cmake : add_library详解

2. cmake官方文档

3. cmake:EXCLUDE_FROM_ALL的用处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值