1. 程式人生 > >uboot的主Makefile分析2

uboot的主Makefile分析2

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具有更高優先順序。