在vs2017中通过CMake 配置ffmpeg 环境
ffmpeg工具包和本篇测试代码在如下
链接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA
提取码:5ndl
先用CMkae创建一个项目,之后在该项目中配置ffmpeg
项目创建成功后,解压ffmpeg工具包
解压之后,有3个文件夹
配置CMakeLists.txt
在创建的项目中,找到CMakeLists.txt
这个CMakeLists.txt类似于java中的build.gradle文件,功能是告知Cmake.exe工具要如何去构建当前项目
1.先配置ffmpeg头文件的根目录
我们想要使用ffmpeg中提供的函数,那么就要确定头文件的位置。ffmpeg中的头文件都是放在include中,因此,我们可以在CMakeLists.txt中配置include的路径。配置代码的第5行
cmake_minimum_required (VERSION 3.8)
#能够在 编码的时候 使用ffmpeg的函数
# 设置头文件的查找位置
include_directories("D:/ffmpeg-20180813-551a029-win64-dev/include")
# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject4 "CMakeProject4.cpp" "CMakeProject4.h")
2.配置ffmpeg库的根目录
除了配置头文件之外,ffmpeg自身的函数也调用了某些库,这些库都放在lib文件夹里,因此我们还要配置这些库的根目录
库的配置看第8行
cmake_minimum_required (VERSION 3.8)
#能够在 编码的时候 使用ffmpeg的函数
# 设置头文件的查找位置
include_directories("D:/ffmpeg-20180813-551a029-win64-dev/include")
# 设置库的查找目录 jar
link_directories("D:/ffmpeg-20180813-551a029-win64-dev/lib")
# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject4 "CMakeProject4.cpp" "CMakeProject4.h")
3.设置我们程序将要链接的ffmpeg库
源代码变为可执行程序,需要经过编译-链接,两个步骤。编译好理解,就是将源代码翻译成机器指令,而链接是将其他编译好的机器指令和我们自己的机器指令进行结合.,这里的其他编译好的机器指令其实指的就是库,因为库中的代码都是经过编译的。
因为我们的程序引用到了ffmpeg中的代码,所以在链接的时候也要链接ffmpeg中的库,在lib文件下
凡是以lib结尾的文件都是ffmpeg的库,我们在CMakeLists.txt中,看16行,将这些库都引入
#设置编译链接的库 ffmpeg
cmake_minimum_required (VERSION 3.8)
#能够在 编码的时候 使用ffmpeg的函数
# 设置头文件的查找位置
include_directories("D:/ffmpeg-20180813-551a029-win64-dev/include")
# 设置库的查找目录 jar
link_directories("D:/ffmpeg-20180813-551a029-win64-dev/lib")
# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject4 "CMakeProject4.cpp" "CMakeProject4.h")
#设置编译链接的库 ffmpeg
target_link_libraries( CMakeProject4 avutil avcodec avfilter avdevice avformat postproc swresample )
这里需要注意的是target_link_libraries 中的 CMakeProject4 和add_executable 中的CMakeProject4 名字要一样,这表示要将这些库都集成到add_executable 生成的CMakeProject4.exe这个可执行文件中。
4将ffmpeg的dll拷贝到C:\Windows\System32
最后将dll中的所有dll文件拷贝到C:\Windows\System32
到此,ffmpeg的环境算是配置完成了,接下来,就通过代码来验证下,我们是否配置成功
完整测试代码如下
#include "CMakeProject4.h"
using namespace std;
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
int main()
{
//输出版本号
cout << av_version_info() << endl;
cout << "Hello CMake。" << endl;
system("pause");
return 0;
}
看到如下结果,说明配置成功
这里做个解释
extern c
由于ffmpeg是纯C代码写的,但当前我们的项目环境又是C++,在C++中引入C语言的头文件,一定要将.h用extern C包裹,包裹后,编译在编译头文件中的内容时,才会以C语言的标准去编译头文件,如果不用extern c 包裹,那么编译会以C++的标准编译头文件。
av_version_info()
是ffmpeg中的一个函数,若有输出内容,说明我们配置成功了。
上一篇: VS2017工程中ffmpeg的配置
下一篇: C++输出格式控制 (VS2017)