uboot的主Makefile分析2
阿新 • • 發佈:2018-12-01
1、靜默編譯:
50-54行
ifeq (,$(findstring s,$(MAKEFLAGS))) #如果make後面的引數中沒有s,則XECHO = echo,否則則XECHO=空,靜默編譯
XECHO = echo
else
XECHO = :
endif
$(MAKEFLAGS)是make -後面帶的引數(字串)
$(findstring s,$(MAKEFLAGS))如果MAKEFLAGS中帶有s函式findstring返回s,否則返回空
2、2種編譯方式(原地編譯和單獨輸出資料夾編譯)
56-76行是註解靜默編譯的使用方法
(1)編譯複雜的專案時,Makefile提供2種編譯管理方法。預設情況下是原地編譯(當前檔案中的.c檔案編譯生成的.o檔案放在同一資料夾裡面)
(2)原地編譯有一些壞處:第一,汙染了yuan原始檔目錄;第二,一套原始碼只能按一種配置和編譯方法進行處理,無法同時維護2個或2個以上的配置編譯方式。
(3)輸出資料夾方式編譯(linux kernel也支援,而且uboot的這種技術就是linux kernel學習來的)。基本思路就是在編譯時另外指定一個輸出目錄,所有的編譯生成的.o檔案或者生成的其他檔案全都丟到那個輸出目錄中去。原始碼目錄不會被汙染。
(4)具體用法:預設的就是原地編譯。如果需要指定具體的輸出目錄編譯則有2種方式來指定輸出目錄。
第一種:make O=輸出目錄
第二種:export BUILD_DIR=輸出目錄 然後再make
如果兩個都指定了(既有BUILD_DIR環境變數存在,又有O=xx),則O=xx具有更高優先順序。