2005.08.11 來自:CSDN Naclearcase/" target="_blank" >cci
貼在這裡存個檔
MILY: 宋體; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋體">前一陣子,看了linux驅動程序中makefile變量的寫法,有些東西沒搞清楚,所
以索性就想把關於這塊的內容搞明白,在這裡感謝Dragonfly,他給我推薦了
一篇好文章,看了之後,豁然開朗,寫點心得,希望大家喜歡。
原文見這裡:
http://www.gnu.org/software/make/manual/html_chapter/make_6.html#SEC65
如果覺得英文煩,就聽我先給各位侃侃吧,沒按字翻譯,寫了點覺得有用的東西。
一. 為什麼使用變量
變量在makefile中用來代表一個字符串,用來表示
1. 一系列文件的名字
2. 傳遞給編譯器的參數
3. 需要運行的程序
4. 需要查找源代碼的目錄
5. 你需要輸出信息的目錄
6. 你想做的其它事情。
說白了,這有些類似於編程語言中的宏。
二. 定義變量的方式和建議
變量的名字是大小新敏感的,從大的方面來說,makefile中的變量被分為兩種,一個是用=來定義的,老外叫right-hand sides of variable,另外一種是用define關鍵字定義的,叫做bodies of variable。先簡單說這些,後面詳述。
傳統上使用大寫字母為變量命名,但是GNU推薦使用小寫字母作為makefile內部使用的變量的名字,並用大寫字母定義隱式規則中的參數或在命令行中允許用戶重新定義的參數。
三. 基本的變量引用
用$(name)或$來引用一個變量,所以當你要表示一個$符號時,你要使用$$。當你只使用一個字母作為變量的名字時,你可以用$name來引用這個變量,不過GNU 並不推薦這樣做,因為這種方式通常用來引用自動變量(Automatic Variables)。
四. 兩種風格的變量定義
GNU有兩種定義變量的方式,它們的不同體現在定義它們的風格和他們被展開的方式。
第一類叫做遞歸展開變量(Recursively Expanded Variable)。用=或define關鍵字都
可以定義這種變量,如果變量的定義引用了其它的變量,那麼引用會一直展開下去,
直到找到被引用的變量的最新的定義,並以此作為改變量的值返回。例如:
代碼:
foo = $(bar)
bar = $(ugh)
ugh = Huh?