CMake调用第三方库的两种方法

项目链接第三方库时,让链接器搜索库一般有两种方法。一是用link_directories命令增加链接库路径,使用简单但不适合跨平台项目;二是用find_library命令,会到特定cmake配置文件中找库,若没有对应文件需自己编写,相对麻烦。还提及了find_package cmake config文件生成方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中经常要使用到第三方库,在链接时,为了让链接器能搜索到库,一般有两种方法,一是通过link_directories命令增加链接的库路径;二是通过find_library命令方法。

  1. link_directories命令
  • 使用步骤
    ## 在add_executable或add_library前引入第三方库
    # 1.引入第三方库,${THIRD_PARTY_PREFIX}为用户定义的第三方库目录
    link_directories(${THIRD_PARTY_PREFIX}/lib)
    # 2.增加第三方库头文件目录
    include_directories(${THIRD_PARTY_PREFIX}/include)
    # 3.给目标增加依赖库(如main)
    target_link_libraries(main PRIVATE freetype)
    
  • 参考资料
    命令介绍
  1. find_library命令
    link_directories命令不需要cmake配置文件,只需要给出库的路径就可以了,使用相对简单,但不适合跨平台项目。而find_library会到类似XxxConfig.cmake 或 xxx-config.cmake 或 FindXxx.cmake文件去找动态库或静态库,如果自己写的库,或者第三方库没有对应的配置文件,需要自己编写对应的cmake config文件,相对于link_directories方法,就有些麻烦。
  • 使用步骤
   # 1.THIRD_PARTY_PREFIX加入到find_package搜索路径
   set(CMAKE_PREFIX_PATH ${THIRD_PARTY_PREFIX})
   # 2.搜索freetype库 
   find_package(freetype REQUIRED)
   # 3.给目标添加依赖库
   target_link_libraries(main PRIVATE freetype)
  1. find_package cmake config文件生成方法
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
  ${PROJECT_NAME}ConfigVersion.cmake
  VERSION ${PACKAGE_VERSION}
  COMPATIBILITY SameMajorVersion)

install(
    EXPORT ${PROJECT_NAME}Targets
    FILE ${PROJECT_NAME}Targets.cmake
    DESTINATION lib/cmake/)

configure_package_config_file(
    cmake/config.cmake.in ${PROJECT_NAME}Config.cmake
    INSTALL_DESTINATION lib/cmake/)

install(
  FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
        ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
        DESTINATION lib/cmake/)

## config.cmake.in文件内容
@PACKAGE_INIT@
# include(CMakeFindDependencyMacro)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
find_dependency(spdlog REQUIRED)
check_required_components("@PROJECT_NAME@")
### FFmpeg 第三方库的使用教程和下载地址 #### 一、FFmpeg 的第三方依赖库概述 FFmpeg 是一个功能强大的多媒体处理框架,其核心功能可以通过编译时引入不同的第三方库来扩展。这些第三方库可以提供额外的功能支持,比如硬件加速解码、更高效的音频处理算法以及更多的视频编码器支持。 常见的 FFmpeg 第三方库包括但不限于: - **libx264**: H.264 编码的支持[^1]。 - **libx265**: HEVC (H.265) 编码的支持。 - **freetype**: 字体渲染支持。 - **fontconfig**: 字体配置支持。 - **libass**: 子标题渲染支持。 - **fdk-aac**: 高质量 AAC 编码支持。 #### 二、获 FFmpeg 和第三方库方法 如果需要快速获预编译的 FFmpeg 及其常用第三方库,可以直接通过网盘资源下载已整理好的安装包。然而需要注意的是,这类资源可能非最新版本,因此对于开发环境有严格需求的情况,建议从官方网站或其他可信渠道手动下载构建。 以下是具体的两种方法: 1. **从网盘下载预编译包** 如果希望节省时间,可以选择从提供的网盘链接下载完整的 FFmpeg 安装包及其所需的第三方库。注意提码为 `vacp`。此方式适合于测试或学习用途,但对于生产环境不推荐。 2. **从官方源码自行编译** 对于更高灵活性的需求,可以从 FFmpeg 官方网站下载源码,按照官方文档中的指导完成编译过程。例如,引用[2] 提供了一个基于 HarmonyOS 平台移植 FFmpeg 的案例,其中提到使用的 FFmpeg 版本为 n4.4。虽然该教程针对特定平台,但通用部分仍然适用。 #### 三、利用 vcpkg 管理 C++ 库 为了简化跨平台项目中第三方库的管理和集成工作,可以借助现代工具如 vcpkg 来自动下载和配置所需库文件。具体操作如下所示: 1. 初始化 vcpkg 工具链: ```bash git clone https://github.com/microsoft/vcpkg.git ./vcpkg/bootstrap-vcpkg.sh ``` 2. 在 cmake 文件中指定 toolchain 路径: ```cmake set(CMAKE_TOOLCHAIN_FILE "/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake") ``` 3. 使用 vcpkg 安装目标库: ```bash ./vcpkg install libx264:x64-windows ./vcpkg install fdk-aac:x64-linux ``` 上述命令会分别在 Windows 和 Linux 上安装对应的库文件[^3]。 #### 四、总结 无论是选择直接下载预编译包还是自己动手编译,都应根据实际应用场景权衡利弊。前者简单快捷却缺乏定制化能力;后者虽复杂一些,但却能完全掌控最终产物的质量与特性集。 ```python import subprocess def compile_ffmpeg_with_third_party_libraries(): """演示如何调用外部脚本来编译带有第三方库支持的FFmpeg""" try: result = subprocess.run(['./configure', '--enable-libx264', '--enable-libx265'], check=True, capture_output=True, text=True) print(result.stdout) except subprocess.CalledProcessError as e: print(f"An error occurred during compilation: {e.stderr}") compile_ffmpeg_with_third_party_libraries() ``` 以上 Python 示例展示了如何通过命令行参数启用某些第三方库支持。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabinSong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值