歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

U-Boot 頂層Makefile解析

u-Boot -Makefile(一)  聲明 : 以下解析大部分來自網絡大神之手 所以可以放心閱讀  Good luck

VERSION = 1
PATCHLEVEL = 1
SUBLEVEL = 6
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
#版本號定義
VERSION_FILE = $(obj)include/version_autogenerated.h  #不是很理解這句話的意思
# 舉例理解$(obj)  obj := a.o b.o  $(obj)指的是obj變量的值  即為a.o b.o
# makefile中的$(xxx)跟shell中的是不一樣的

HOSTARCH := $(shell uname -m | \
 sed -e s/i.86/i386/ \
    -e s/sun4u/sparc64/ \
    -e s/arm.*/arm/ \
    -e s/sa110/arm/ \
    -e s/powerpc/ppc/ \
    -e s/macppc/ppc/)
# uname 命令將正在使用的操作系統名寫到標准輸出中
# -m 顯示系統運行的硬件機器ID號
#  '| '  為linux中的管道處理符 pipe    而 '\'  自然就是換行符咯
#  sed -e 後面跟著一串(shell?)命令腳本 表示將i.86替換成i386  這樣執行一套程序下來就知道硬件的體系結構了  如何知道的?
# 我猜應該會有某個變量用來標記 是哪種硬件體系的吧 只要對應的體系結構名被修改後就標記它 得以知道是哪種結構?
# i386
# sparc64
# arm -ARM
# ppc -Power PC


##下面這句話的意思是定義變量HOSTOS,HOSTOS裡面存放的是主機安裝的,並且當前正在運行的操作系統
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
    sed -e 's/\(cygwin\).*/cygwin/')
#sed -e 's/\(cygwin\).*/cygwin/')   
# 這一句的意思是檢測出主機安裝的,並且當前正在運行的操作系統名,並把這個系統名中的大寫字母轉換為小寫字母
# 然後在通過sed流編輯器匹配所有的,這個系統名中出現的"\(cygwin\).*"模式,然後再用"cygwin"模式替換。(用來處理"cygwin"環境下編譯的環境變量)
## 可以把shell腳本寫到makefile裡面,這是make中的shell function,相當於shell中的命令替換!
# uname -s 得到內核系統名稱即Linux   
# tr '[:upper:]' '[:lower:]'把大寫變成小寫然後輸出(也就是將Linux--->linux  Linux是通過管道得來的)(tr為shell command)
 
export HOSTARCH HOSTOS  #導出變量HOSTARCH 和變量HOSTOS 

# Deal with colliding definitions from tcsh etc.處理來自tcsh相互沖突的定義等等
VENDOR= 
#VENDOR 是賣家、賣方的意思 這邊可以寫開發商名字吧

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2013-10/91159p2.htm

Copyright © Linux教程網 All Rights Reserved