VLC源碼makefile分析

通過分析makefile編譯構建過程,梳理各個具體目錄的作用和聯繫

這是一張freewind畫的結構圖,個人通過分析查看跟蹤makefile整理,使用vlc版本爲3.0.6。

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

 

 

再簡化一下這個圖(實在是難看)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章