VLC源码makefile分析

通过分析makefile编译构建过程,梳理各个具体目录的作用和联系

这是一张freewind画的结构图,个人通过分析查看跟踪makefile整理,使用vlc版本为3.0.6 for linux

ubuntu 18.04编译,默认配置。

为了方便查看已经缩减了很多具体的细节,后续文字补充;

分析过程中碰到的一些疑惑,记录下:

1.0 vlc 顶层目录下的makefile , 查看 all:目标规则,

all:

    $(MAKE) $(AM_MAKEFLAGS) all-recursive

相当于make all-recursive, 可是直接找 all-recursive: 可能找不到这个target的依赖规则,但是能看到RECURSIVE_TARGETS = all-recursive....   am__recursive_targets=$(RECURSIVE_TARGETS) .. am__recursive_targets 这个target是有对应规则的,把对应变量展开,就能看到其实是多个target对应一条规则的用法。

2.0 $(am__recursive_targets): 的规则中执行的命令中,调用的shell 脚本执行,

保证在一个线程中执行shell脚本的命令,所有的命令都在一行中完成,这与makefile的作用机制有关

要调用shell里面的变量使用$$

3.0 对于一些变量值,可以在编译的时候使用 echo 输出,方便分析

4.0 分析一个具体的编译文件命令:以src目录下makefile为例,追踪依赖关系,最后落实到具体的 .c 文件编译到 .lo 文件

echo上面的几个变量,$(LTCOMPILE):

../doltcompile gcc -DHAVE_CONFIG_H -I. -I.. -DMODULE_STRING="core" -DLOCALEDIR="/usr/local/share/locale" -DPKGDATADIR="/usr/local/share/vlc" -DPKGLIBDIR="/usr/local/lib/vlc" -DHAVE_DYNAMIC_PLUGINS -I../include -I../include -g -O2 -Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Werror-implicit-function-declaration -Winit-self -Wlogical-op -Wshadow=local -pipe -fvisibility=hidden -O3 -fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range -funroll-loops -fomit-frame-pointer -fstack-protector-strong
 

第二行命令展开,即对应实际的编译命令

<== ../doltcompile gcc .... -MT $@ -MD -MP .deps -c -o $@ $<

<== gcc XX.lo -c -o XX.lo XX.c

再简化一下这个图(实在是难看)

猜你喜欢

转载自blog.csdn.net/u012459903/article/details/87804088
今日推荐