回答
:=
定義變量這裏是左手側,+=
添加右手側到變量的現有值。比較:=
與=
,其評價在使用場所的右手邊(而不是在這個特殊的線)
你可以看一下說明書here(假設你正在使用GNU使)
簡單擴展變量,通過使用線限定「:=」(參見設置變量)。一個簡單的擴展變量的值被一次性掃描,當定義變量時擴展對其他變量和函數的引用。簡單擴展變量的實際值是擴展您編寫的文本的結果。它不包含任何對其他變量的引用;它包含了這個變量被定義時的值。
當所討論的變量尚未定義,「+ =」行爲就像正常「=」:它定義了一個遞歸擴展變量。但是,如果存在以前的定義,那麼'+ ='確實取決於您最初定義的變量的風格。請參閱變量的兩個風味,以獲得兩種變量的解釋。
:=
將爲變量設置一次值,也就是說,每次將變量設置爲變量時,它將不會被重新評估。編譯代碼時可以使性能發生巨大差異。
+=
將簡單地爲變量加上一個值。
:=(簡單擴展變量)的值進行掃描以一勞永逸擴大任何
引用其他變量和函數,變量被定義時。例如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值是安裝逐字;如果它包含 對其他變量的引用,則只要此變量被替換爲 ,就會展開這些變量。並且這被稱爲遞歸擴展。
「=」用於定義遞歸擴展變量。後續使文件會打印出「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節得到更多的細節。
希望這有助於:-)
- 1. 「make」和「make all」有什麼區別?
- 2. 'Make'和'Gradle-aware Make'有什麼區別?
- 3. make和make -j5有什麼區別?
- 4. make nconfig&make linux-nconfig有什麼區別?
- 5. gmake和make有什麼區別?
- 6. make和gcc有什麼區別?
- 7. cmd文件中%和%%有什麼區別?
- 8. Rails中的「create」和「make」有什麼區別?
- 9. .so和.lo文件有什麼區別?
- 10. io_submit和O_ASYNC文件有什麼區別
- 11. .bin和.dat文件有什麼區別?
- 12. .sqlite和.db文件有什麼區別?
- 13. apklib和jar文件有什麼區別?
- 14. XIB和NIB文件有什麼區別?
- 15. NSUserDefaults和.plist文件有什麼區別
- 16. .class和.dex文件有什麼區別?
- 17. .proto和.prototxt文件有什麼區別
- 18. 流和文件有什麼區別?
- 19. .htc和.js文件有什麼區別?
- 20. .out和.log文件有什麼區別
- 21. .so和.a文件有什麼區別?
- 22. MDB和SDF文件有什麼區別?
- 23. * .bat和* .cmd文件有什麼區別?
- 24. .lib和.a文件有什麼區別?
- 25. golang中make和initialize結構有什麼區別?
- 26. 有什麼區別`和$(Bash中有什麼區別?
- 27. HDF5:「文件緩衝區」和「文件緩存」有什麼區別?
- 28. make([] int,0),[] int {}和* new([] int)有什麼區別?
- 29. .Kdb文件,.jks文件和CMS文件有什麼區別?
- 30. .po和.pot文件的文件內容有什麼區別?
你有答案(及以上)到這個[複製問題(http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki 2012-04-19 12:06:09
什麼已經成爲閱讀精美手冊的古老傳統?答案就在你的指尖...... – Jens 2012-10-09 10:19:06