如何将两个静态库打包合并到一个静态库中

16 篇文章 0 订阅

静态库在链接到目标时,只有链接到可执行程序或者动态库,才会将此静态库全部打包到目标中。如果是静态库B依赖静态库A,则正常情况下,静态库A并不会被打包到静态库B中。此时,那些依赖静态库B的库在链接静态库B的同时,还需要链接静态库A。如果是动态库B链接到静态库A,则A的所有函数都会打包到动态库B中。此时,依赖动态库B的目标在链接动态库B的时候,就不需要再链接静态库A了。

另外,如果想把静态库A打包到静态库B中,则需要用ar命令:

cmake_minimum_required(VERSION 3.22.0)
project(test LANGUAGES CXX)

add_library(z_b STATIC b.cpp)

find_library(Z_A NAMES libz_a.a PATHS /home/zhjs/Coding/C++/static_lib_test/z_a/build/)
message(STATUS "################ ${Z_A} #################")

target_link_libraries(z_b ${Z_A})

# 首先使用此命令输出一个名为libmerge.a的静态库文件,并执行ar命令,即打包命令。
# 这个ar命令以及参数含义是指将后面两个静态库打包到名为libmerge.a的文件中
add_custom_command(OUTPUT libmerge.a COMMAND ar crsT libmerge.a ${Z_A} $<TARGET_FILE:z_b>)

# 创建一个自定义目标target,叫做z_merge,默认情况下,所有的目标都会被创建,
# 创建此自定义目标的目的是生成目标z_merge之前,由于加了DEPENDS,所以会先生成
# libmerge.a这个目标或者文件,这就保证了一定会执行上述的add_custom_command命令
add_custom_target(z_merge ALL DEPENDS libmerge.a)

这样,就会将两个静态库打包到一个静态库中,这样,其他目标只需要依赖这个libmerge.a即可,不再需要依赖两个单独的静态库。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值