如何设置CMake寻找本地包FFmpeg?

How set CMake to find a local package FFmpeg?

我正在尝试使用 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 中使用 PkgConfig 可以指定路径。 但是我不知道如何

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

  1. 安装pkg-config,nasm:

    须藤apt-get安装-y pkg-config

    sudo apt-get 安装 nasm

  2. 下载ffmpeg源码:

    https://ffmpeg.org/download.html

  3. 编译并安装ffmpeg:

    tar -xvf <downloaded_filename>
    cd /root/folder/with/ffmpeg/src
    ./configure
    make
    sudo make install 
    
  4. 将以下内容添加到您的 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)