一、目录结构
├─3rdparty # 第三方依赖库
│ └─ffmpeg-4.4.3 # ffmpeg库
│ ├─mingw # 用MinGW64编译的库
│ │ ├─bin
│ │ ├─include
│ │ └─lib
│ └─msvc # 用MSVC编译的库
│ ├─bin
│ ├─include
│ └─lib
├─demo3.pro # 项目配置文件
└─main.c # 源码目录
二、xx.pro文件
QT -= gui
CONFIG += c++11 # console
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.c
win32 {
# 使用 QT_ARCH 检测架构
contains(QT_ARCH, x86_64) {
message("Configuring for 64-bit")
# 公共配置:定义安装目标路径(根据构建模式自动区分)
CONFIG(release, debug|release) {
ffmpeg_dlls.path = $$OUT_PWD/release # Release模式目标路径
} else {
ffmpeg_dlls.path = $$OUT_PWD/debug # Debug模式目标路径
}
INSTALLS += ffmpeg_dlls # 注册安装目标
# 编译器类型检测
win32-msvc* {
message("Using MSVC toolchain")
INCLUDEPATH += $$PWD\3rdparty\ffmpeg-4.4.3\msvc\include
LIBS += $$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avdevice.lib \
$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avfilter.lib \
$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avformat.lib \
$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avcodec.lib \
$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\swscale.lib \
$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\swresample.lib \
$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avutil.lib
# 指定需要安装的DLL文件
ffmpeg_dlls.files = $${FFMPEG_MSVC_DIR}\bin\*.dll
}
win32-g++ {
message("Using MinGW toolchain")
INCLUDEPATH += $$PWD\3rdparty\ffmpeg-4.4.3\mingw\include
LIBS += $$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavdevice.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavfilter.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavformat.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavcodec.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libswscale.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libswresample.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libpostproc.dll.a \
$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavutil.dll.a
# 指定需要安装的DLL文件
ffmpeg_dlls.files =$$PWD\3rdparty\ffmpeg-4.4.3\mingw\bin\*.dll
}
}
else {
message("32-bit builds not configured")
}
}
说明:
- 指定安装位置和目标,当执行make install 时拷贝dll文件到输出目录。
- 注意区分动态库导入库和静态库文件,可以通过库文件大小来判断。
三、main.c测试文件
#include <stdio.h>
#include "libavcodec/avcodec.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavformat/avformat.h"
int main()
{
printf("avcodec version is %u \n",avcodec_version());
printf("avdevice version is %u \n",avdevice_version());
printf("avfilter version is %u \n",avfilter_version());
printf("avformat version is %u \n",avformat_version());
return 0;
}
四、编译后自动拷贝dll文件
如何触发make install ?在项目设置哪里添加一个make install。