cmake链接动态库和静态库的写法

1.动态库链接

(1)链接动态库的第一种写法

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)

add_executable(${PROJECT_NAME}
               ${ALL_SOURCES}
               ${ALL_INCLUDES}
)

target_link_libraries(${PROJECT_NAME}
    srtp2
    # -lsrtp2 #前面也可以加-l
)

这种写法要求link_directories、add_executable、target_link_libraries的顺序必须是这样的先后关系

(2) 链接动态库的第2种写法

find_library(srtp2Lib srtp2 HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)

add_executable(${PROJECT_NAME}
               ${ALL_SOURCES}
               ${ALL_INCLUDES}
)

target_link_libraries(${PROJECT_NAME}
                       ${srtp2Lib}
)

这种写法find_library和add_executable是没有先后顺序的,而且在cmake的编译阶段就可以检查出是否能在对应的目录找到srtp2的库,推荐使用这种方式

2.静态库链接

(1)下面是链接静态库的第一种写法

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)

add_executable(${PROJECT_NAME}
               ${ALL_SOURCES}
               ${ALL_INCLUDES}
)

target_link_libraries(${PROJECT_NAME}
    srtp2
    # -lsrtp2 #前面也可以加-l
    # libsrtp2.a #可以明确指定静态库
)

和链接动态库的写法是一模一样的。以linux系统下为例子,target_link_libraries里面链接的库,实际上会自动查找libsrtp2.so或libsrtp2.a 文件,但是若.so文件和.a文件在指定同时存在,那么.so文件优先,但是若明确指定为libsrtp2.a ,那么便链接的是静态库

(2)链接静态库的第2种写法

find_library(srtp2Lib srtp2 HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)
# find_library(srtp2Lib libsrtp2.a HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)

add_executable(${PROJECT_NAME}
               ${ALL_SOURCES}
               ${ALL_INCLUDES}
)

target_link_libraries(${PROJECT_NAME}
                       ${srtp2Lib}
)

和链接动态库的第2种写法一模一样。同样find_library查找时,.so文件优先,但是也是可以明确指定查找libsrtp2.a文件

(3) 链接静态库的第3种写法

link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/lib/libsrtp.a)

add_executable(${PROJECT_NAME}

               ${ALL_SOURCES}

               ${ALL_INCLUDES}

)

这种方法是采用link_libraries指令链接静态库,link_libraries必须在add_executable指令之前调用,link_libraries是比较古老的指令了,不推荐这种写法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值