回答
:=
定义变量这里是左手侧,+=
添加右手侧到变量的现有值。比较:=
与=
,其评价在使用场所的右手边(而不是在这个特殊的线)
你可以看一下说明书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 -j5有什么区别?
- 2. make nconfig&make linux-nconfig有什么区别?
- 3. make和gcc有什么区别?
- 4. gmake和make有什么区别?
- 5. io_submit和O_ASYNC文件有什么区别
- 6. .out和.log文件有什么区别
- 7. XIB和NIB文件有什么区别?
- 8. .sqlite和.db文件有什么区别?
- 9. .lib和.a文件有什么区别?
- 10. .bin和.dat文件有什么区别?
- 11. MDB和SDF文件有什么区别?
- 12. .class和.dex文件有什么区别?
- 13. * .bat和* .cmd文件有什么区别?
- 14. .htc和.js文件有什么区别?
- 15. apklib和jar文件有什么区别?
- 16. golang中make和initialize结构有什么区别?
- 17. 有什么区别`和$(Bash中有什么区别?
- 18. HDF5:“文件缓冲区”和“文件缓存”有什么区别?
- 19. .Kdb文件,.jks文件和CMS文件有什么区别?
- 20. .po和.pot文件的文件内容有什么区别?
- 21. ==和===有什么区别?
- 22. ==和===有什么区别?
- 23. 有什么区别? :和||
- 24. ==和===有什么区别?
- 25. '=='和'==='有什么区别?
- 26. `&`和`ref`有什么区别?
- 27. 有什么区别:。!和:r!?
- 28. | 0和~~有什么区别?
- 29. Appender和〜有什么区别?
- 30. 文档和DOM有什么区别?
你有答案(及以上)到这个[复制问题(http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki 2012-04-19 12:06:09
什么已经成为阅读精美手册的古老传统?答案就在你的指尖...... – Jens 2012-10-09 10:19:06