通过分析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

 

 

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

 



 

 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信