Makefile之變量賦值

Makefile之變量賦值

2015-02-05   北京-海淀區  

首先Makefile 的語法規則是這樣的:

targets : prerequisites

command

.........

或是這樣: 

targets : prerequisites command

command

.........

targets是文件名,以空格分開,可以使用通配符。一般來說,我們的目標基本上是一個文件,但也有可能是多個文件。

command是命令行,如果其不與“targetrerequisites”在一行,那麼,必須以[Tab]開頭,如果和prerequisites在一行,那麼可以用分號做爲分隔。

prerequisites也就是目標所依賴的文件(或依賴目標)。如果其中的某個文件要比目標文件要新,那麼,目標就被認爲是“過時的”,被認爲是需要重新編譯生成的。

 

因爲,makefile關係到了整個工程的編譯規則。一個工程中的源文件比較多,其按類型、功能、模塊分別放在若干個目錄中,當我們修改,添加,刪除某些源文件時,要修改相應的Makefile,如果該源文件在Makefile中多處被依賴使用,那麼我們要修改Makefile多處地方,這樣會帶來諸多不便,爲了使makefile的更容易維護,在makefile中我們可以使用變量makefile變量也就是一個字符串,理解成C語言中的宏可能會更好

對變量的賦值有一下幾種方式。這裏面讓人多少有些疑惑的是“=”和“:=”賦值的區別~

 

=     是遞歸展開式變量

          value1 = 1

          value2 = $(value1)

          value1 = 2

          最終$(value2)就變成了2

:=    是直接展開式變量

          value1 := 1

          value2 := $(value1)

          value1 := 2

         最終$(value2)1

?=   是條件賦值

      value ?= abc  意思是,當value之前沒有使用的話,就給value賦值abc;當value之前已經使用的話,就不給value賦值 

+=  追加賦值

     value = filename1.o filename2.o

     value += filename3.o

     則$(value)filename1.o filename2.o filename3.o

     給變量賦值時,如果在一行放不下,可以用\符號將他們連接起來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章