SRS4.0源码分析-makefile
本文采用的 SRS 版本是 4.0-b8 , 下载地址:github
makefile
语法请看 《跟我一起写Makefile》,SRS 的 makefile
是 configure
shell 脚本生成的。
为了方便读者对着代码行数,我的 makefile 下载地址,百度网盘,提取码:5n9w
虽然 makefile
是代码生成的,但是并没有做太多的封装,抽象,所以还是比较容易阅读的。
SRS 的 makefile
总共 150 行左右,依赖非常清晰。
开始分析 makefile 。
因为 makefile 的规则是 ,第一个 不 以 .
开头的 targe 就是默认的target,所以 make
命令执行的时候,是执行 default
这个 target 个规则。
default
依赖 server
,然后 在 104 ~ 106 行, server
又依赖 _prepare_dir
,如下
#104 ~ 106 行server: _prepare_dir @echo "Build the SRS server" $(MAKE) -f objs/Makefile srs
_prepare_dir
这个 target 主要是创建目录,如下:
# 153 ~ 160 行@mkdir -p objs@mkdir -p objs/src/core@mkdir -p objs/src/kernel@mkdir -p objs/src/protocol@mkdir -p objs/src/app@mkdir -p objs/src/main@mkdir -p objs/src/main
_prepare_dir
创建完 目录之后 ,就会执行 104 ~ 106 行 的 $(MAKE) -f objs/Makefile srs
命令。果然,在这里 使用了 objs/Makefile
这里详细 讲解一下 这个命令,-f
是指定 makefile 文件,后面的 srs
是一个 target ,所以实际执行的是 objs/Makefile
文件的 srs
target 的编译规律,代码如下:
# build objs/srssrs: objs/srsobjs/srs: objs/src/core/srs_core.o 很多 o 后缀文件 objs/src/main/srs_main_server.o $(LINK) -o objs/srs objs/src/core/srs_core.o 很多 o 后缀文件 objs/src/main/srs_main_server.o objs/st/libst.a objs/openssl/lib/libssl.a objs/openssl/lib/libcrypto.a objs/srtp2/lib/libsrtp2.a objs/ffmpeg/lib/libavcodec.a objs/ffmpeg/lib/libswresample.a objs/ffmpeg/lib/libavutil.a objs/opus/lib/libopus.a -ldl -lpthread -lrt
由此 可见 srs 可执行文件 ,就是由上面的命令生成的。
makefile 逻辑分析完毕。
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:
Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习