2012-04-19 35 views
8

以下聲明中的工作區別是什麼?make文件中的=和+ =有什麼區別?

LDDIRS := -L$(ORACLE_LIB) 
LDDIRS += -L$(ORACLE_LIB) 
+1

你有答案(及以上)到這個[複製問題(http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki 2012-04-19 12:06:09

+0

什麼已經成爲閱讀精美手冊的古老傳統?答案就在你的指尖...... – Jens 2012-10-09 10:19:06

回答

4

:=定義變量這裏是左手側,+=添加右手側到變量的現有值。比較:==,其評價在使用場所的右手邊(而不是在這個特殊的線)

你可以看一下說明書here(假設你正在使用GNU使)

-3

:=是分配方式與=相同。

+=向變量添加一個新值。

+0

:=和=是一樣的嗎?這是褻瀆! – shikhanshu 2017-06-20 20:40:15

0

This website

的語法:=Link to place on page

簡單擴展變量,通過使用線限定「:=」(參見設置變量)。一個簡單的擴展變量的值被一次性掃描,當定義變量時擴展對其他變量和函數的引用。簡單擴展變量的實際值是擴展您編寫的文本的結果。它不包含任何對其他變量的引用;它包含了這個變量被定義時的值。

的語法+=Link to place on page

當所討論的變量尚未定義,「+ =」行爲就像正常「=」:它定義了一個遞歸擴展變量。但是,如果存在以前的定義,那麼'+ ='確實取決於您最初定義的變量的風格。請參閱變量的兩個風味,以獲得兩種變量的解釋。

0

:=將爲變量設置一次值,也就是說,每次將變量設置爲變量時,它將不會被重新評估。編譯代碼時可以使性能發生巨大差異。

+=將簡單地爲變量加上一個值。

9
  • :=(簡單擴展變量)的值進行掃描以一勞永逸擴大任何
    引用其他變量和函數,變量被定義時。例如 x:=foo
    y:=$(x) bar
    x:=later
    所以以上相當於
    y:=foo bar
    x:=later

  • + =用於例如追加更多的文本給變量
    objects=main.o foo.o bar.o
    objects+=new.o
    將設置對象 'main.o foo.o的文件bar.o new.o'

  • =爲遞歸擴展variable.The值是安裝逐字;如果它包含 對其他變量的引用,則只要此變量被替換爲 ,就會展開這些變量。並且這被稱爲遞歸擴展。

3

「=」用於定義遞歸擴展變量。後續使文件會打印出「Y是後來吧」

x = foo 
y = $(x) bar 
x = later 

all:;echo "y is" $(y) 

「:=」是定義簡單擴展型變量,這是一勞永逸擴大。下面讓文件會打印出「y是富巴」

x := foo 
y := $(x) bar 
x := later 

all:;echo "y is" $(y) 

另外,其他人前面指出的,你可以在GNU進行手動的Using Variables節得到更多的細節。

希望這有助於:-)