【问题标题】:How set CMake to find a local package FFmpeg?如何设置 CMake 查找本地包 FFmpeg?
【发布时间】:2022-08-08 14:03:32
【问题描述】:

我正在尝试使用 FFmpeg 包编写 CMakeLists,并在 Windows 和 Linux 上编译。 首先从FFmpeg-Builds共享版本下载

我想象项目的结构是这样的:

<project root>
deps/
  ffmpeg/
    win-x64/
      incluve/
      lib/
      bin/
    linux-x64/
      incluve/
      lib/
      bin/
src/
CMakeLists.txt

如何帮助 CMake 查找库:avcodec、avformat、avutil 等? 也许在文件夹lib/pkgconfig 中使用包配置可以指定路径。 但我不知道如何

标签: c++ ffmpeg cmake build


【解决方案1】:

以下内容在使用 cmake 的 Linux 上对我来说效果很好。 您必须找到适用于 Windows 的等价物。 我在 Windows 上使用了 ffmpeg,但没有使用 cmake(即直接在 Visual Studio 项目中)。

  1. 安装 pkg-config、nasm:
        sudo apt-get install -y pkg-config
    
        sudo apt-get install nasm 
    
    1. 下载ffmpeg源代码:

      https://ffmpeg.org/download.html

    2. 构建 ffmpeg 并安装它:

      tar -xvf <downloaded_filename>
      cd /root/folder/with/ffmpeg/src
      ./configure
      make
      sudo make install 
      
    3. 将以下内容添加到您的 CMakeLists.txt:

      在一开始的时候:

       find_package(PkgConfig REQUIRED)
       pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET
           libavdevice
           libavfilter
           libavformat
           libavcodec
           libswresample
           libswscale
           libavutil
       )
      
       set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
      

      在链接器区域:

       target_link_libraries(${PROJECT_NAME} PUBLIC PkgConfig::LIBAV)
      

【讨论】:

  • 我可以从问题中的链接下载已经编译的库吗?此外,我需要在 Windows 下编译的支持。使用已经编译的库不是更容易吗?
  • 对于 Linux,我发现从源代码构建更容易。对于 Windows,我相信预构建的库更易于使用。这确实是我自己做的。但正如我写的那样,我直接在 VisualStudio 项目中使用它们(添加了包含和库路径,并与适当的库链接)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多