这个例子中定义了三个变量:“dir”,“foo_sources”和“foo_print”。
四、追加变量
我们可以使用“=”操作符给变量追加,如:
objects = main.o foo.o bar.o utils.o
objects = another.o
于是,我们的$(objects)变成:“main.o foo.o bar.o utils.o another.o”(another.o被追加进去了)
使用“=”操作符,可以模拟为下面的这种例子:
objects = main.o foo.o bar.o utils.o
objects := $(objects) another.o
所不同的是,用“=”更为简洁。
如果变量之前没有定义过,那么,“=”会自动变成“=”,如果前面有变量定义,那么“=”会继承于前次操作的赋符。如果前一次的是“:=”,那么“=”会以“:=”作为其赋符,如:
variable := value
variable = more
等价于:
variable := value
variable := $(variable) more
但如果是这种情况:
variable = value
variable = more
由于前次的赋符是“=”,所以“=”也会以“=”来做为赋,那么岂不会发生变量的递补归定义,这是很不好的,所以make会自动为我们解决这个问题,我们不必担心这个问题。
五、override 指示符
如果有变量是通常make的命令行参数设置的,那么Makefile中对这个变量的赋会被忽略。如果你想在Makefile中设置这类参数的,那么,你可以使用“override”指示符。其语法是:
override <variable> = <value>
override <variable> := <value>
当然,你还可以追加:
override <variable> = <more text>
对于多行的变量定义,我们用define指示符,在define指示符前,也同样可以使用ovveride指示符,如:
override define foo
bar
endef
六、多行变量
还有一种设置变量的方法是使用define关键字。使用define关键字设置变量的可以有换行,这有利于定义一系列的命令(前面我们讲过“命令包”的技术就是利用这个关键字)。
define指示符后面跟的是变量的名字,而重起一行定义变量的,定义是以endef关键字结束。其工作方式和“=”操作符一样。变量的可以包含函数、命令、文字,或是其它变量。因为命令需要以[Tab]键开头,所以如果你用define定义的命令变量中没有以[Tab]键开头,那么make就不会把其认为是命令。
下面的这个示例展示了define的用法:
define two-lines
echo foo
echo $(bar)
endef
七、环境变量
make运行时的系统环境变量可以在make开始运行时被载入到Makefile文件中,但是如果Makefile中已定义了这个变量,或是这个变量由make命令行带入,那么系统的环境变量的将被覆盖。(如果make指定了“-e”参数,那么,系统环境变量将覆盖Makefile中定义的变量)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40629-19.html
不叫炒股
你赚发了