SRS的编译过程分析makefile—SRS源码分析

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

SRS 的 configure 脚本一共生成了两个 makefile 文件,如下:

  1. trunk/makefile
  2. trunk/objs/makefile

makefile 语法请看 《跟我一起写Makefile》

虽然 makefile 是代码生成的,但是并没有做太多的封装,抽象,所以还是比较容易阅读的。SRS 的 makefile 总共 1000 行左右,依赖非常清晰。

SRS 的 makefile 的第一个 targetdefault,而不是 all,如下:

1-1

makefile 的规则是 ,第一个 不 以 . 开头的 target 就是默认的 target,所以 make 命令执行的时候,是执行 default 这个 target 个规则。

default 依赖 serverserver 又依赖 _prepare_dir,如下

server: _prepare_dir
    @echo "Build the SRS server, JOBS=${JOBS}, FORCE_MAKE_JOBS=YES"
    $(MAKE)$(JOBS) -f ./objs/Makefile srs
    @bash objs/_srs_build_summary.sh

_prepare_dir 是负责创建目录的,如下:

_prepare_dir:
    @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 创建完目录之后 ,会执行 make -f ./objs/Makefile srs 命令。-f 是指定 makefile 文件,后面的 srs 是一个 target ,所以实际执行的是 objs/Makefile 文件的 srs target 的编译规律,如下:

# build ./objs/srs
srs: ./objs/srs

./objs/srs: ./objs/src/core/srs_core.o ./objs/src/core/srs_core_version.o ./objs/src/core/srs_core_version5.o ./objs/src/core/srs_core_autofree.o ./objs/src/core/srs_core_performance.o ./objs/src/core/srs_core_time.o 
...省略代码... \
    $(LINK) -o ./objs/srs ./objs/src/core/srs_core.o ./objs/src/core/srs_core_version.o ./objs/src/core/srs_core_version5.o ./objs/src/core/srs_core_autofree.o ./objs/src/core/srs_core_performance.o ./objs/src/core/srs_core_time.o ./objs/src/core/srs_core_platform.o ./objs/src/kernel/srs_kernel_error.o ./objs/src/kernel/srs_kernel_log.o 
...省略代码... \
./objs/src/app/srs_app_rtc_codec.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 ./objs/srt/lib/libsrt.a -ldl -lpthread -lrt -rdynamic -fsanitize=address -fno-omit-frame-pointer -static-libasan

上面就是 srs 可执行文件的生成规则,很简单,就是用链接器把 一堆的 .o 文件跟静态库 链接起来就完事了。


版权所属 xianwanzhiyin.net 罗上文 2023 all right reserved,powered by Gitbook该文件修订时间: 2024-01-08 01:12:45

results matching ""

    No results matching ""