轉載參考博客:http://www.cnblogs.com/heaad/archive/2010/07/17/1779806.html
下面分析命令“make TQ2440_config”執行過程,爲了簡化分析過程這裏主要分析將編譯目標輸出到源代碼目錄的情況。
下面分析命令“make TQ2440_config”執行過程,爲了簡化分析過程這裏主要分析將編譯目標輸出到源代碼目錄的情況。
TQ2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t TQ2440 samsung s3c24x0
其中的依賴“unconfig”定義如下:unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
其中“@”的作用是執行該命令時不在shell顯示。“obj”變量就是編譯輸出的目錄,因此“unconfig”的作用就是清除上次執行make *_config命令生成的配置文件(如include/config.h,include/config.mk等)。
$(MKCONFIG)在上面指定爲“$(SRCTREE)/mkconfig”。$(@:_config=)爲將傳進來的所有參數中的_config替換爲空(其中“@”指規則的目標文件名,在這裏就是“TQ2440_config ”。$(text:patternA=patternB),這樣的語法表示把text變量每一個元素中結尾的patternA的文本替換爲patternB,然後輸出) 。因此$(@:_config=)的作用就是將TQ2440_config中的_config去掉,得到TQ2440。
因此“@$(MKCONFIG) $(@:_config=) arm arm920tTQ2440 samsung s3c24x0”實際上就是執行了如下命令:
./mkconfig TQ2440 arm arm920t TQ2440 samsung s3c24x0
即將“TQ2440 arm arm920t TQ2440 samsung s3c24x0”作爲參數傳遞給當前目錄下的mkconfig腳本執行。
在mkconfig腳本中給出了mkconfig的用法:
# Parameters: Target Architecture CPU Board
[VENDOR] [SOC]
因此傳遞給mkconfig的參數的意義分別是:
TQ2440:Target(目標板型號)
arm:Architecture (目標板的CPU架構)
arm920t:CPU (具體使用的CPU型號)
TQ2440:Board
samsung:VENDOR(生產廠家名)
s3c24x0:SOC