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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 CMake 编译动态库静态库,你可以按照以下步骤进行操作: 1. 创建一个 CMakeLists.txt 文件,该文件描述了构建过程和项目配置。 2. 在 CMakeLists.txt 文件中,使用 `add_library` 命令来定义要构建的库。使用 `SHARED` 参数来指定动态库,使用 `STATIC` 参数来指定静态库。例如: ```cmake # 构建动态库 add_library(mylib SHARED src/mylib.cpp) # 构建静态库 add_library(mylib_static STATIC src/mylib.cpp) ``` 3. 如果你有多个源文件,可以将它们一起添加到库中: ```cmake # 构建动态库 add_library(mylib SHARED src/mylib.cpp src/other.cpp) # 构建静态库 add_library(mylib_static STATIC src/mylib.cpp src/other.cpp) ``` 4. 如果你想为库定义公共头文件目录,可以使用 `target_include_directories` 命令。例如: ```cmake target_include_directories(mylib PUBLIC include) ``` 5. 如果你希望链接其他库到你的库中,可以使用 `target_link_libraries` 命令。例如: ```cmake target_link_libraries(mylib PUBLIC otherlib) ``` 6. 最后,在 CMakeLists.txt 文件中添加一个 `install` 命令,以便在构建过程完成后安装库文件到指定的目录。例如: ```cmake install(TARGETS mylib DESTINATION lib) install(FILES include/mylib.h DESTINATION include) ``` 7. 运行 CMake 命令来生成构建系统所需的文件: ```shell cmake . ``` 8. 使用生成的构建系统来编译和构建库: ```shell make ``` 在构建过程完成后,你将在指定的目录(例如 `lib`)中找到生成的动态库静态库文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值