Nai*_*a B 14 unix linux makefile
以下陈述中的工作区别是什么?
LDDIRS := -L$(ORACLE_LIB)
LDDIRS += -L$(ORACLE_LIB)
Run Code Online (Sandbox Code Playgroud)
小智 14
:=(简单扩展变量)
当定义变量时,扫描该值一次,并扩展对其他变量和函数的任何引用.例如
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'
=是递归扩展变量.值是逐字安装; 如果它包含对其他变量的引用,则只要替换此变量,就会扩展这些变量.这称为递归扩展.
Zhi*_*Zou 10
"="用于定义递归扩展变量.以下make文件将打印出"y is later bar"
x = foo
y = $(x) bar
x = later
all:;echo "y is" $(y)
Run Code Online (Sandbox Code Playgroud)
":="用于定义简单扩展变量,它一劳永逸地扩展.以下make文件将打印出"y is foo bar"
x := foo
y := $(x) bar
x := later
all:;echo "y is" $(y)
Run Code Online (Sandbox Code Playgroud)
此外,正如其他人之前指出的那样,您可以在GNU make手册的" 使用变量"部分中获得更多详细信息.
希望这可以帮助 :-)
小智 8
GNU Make 具有三个赋值运算符:“:=”、“=”、“?=”和一个用于附加到变量的“+=”。
“:=”立即计算右侧并将实际
字符串存储到左侧。例如: x:=foo y:=$(x) bar x:=later 所以上面相当于 y:=foo bar x:=later
test above example
x := foo
y := $(x) bar
x := later
all:;echo "y is" $(y)
output
------
y is foo bar
Run Code Online (Sandbox Code Playgroud)
“=”就像一个公式定义;它以未计算的形式存储右侧,然后在每次使用左侧时计算该形式。
e.g.:
x = foo
y = $(x) bar
x = later
all:;echo "y is" $(y)
output
------
y is later foo
Run Code Online (Sandbox Code Playgroud)
"?= 仅当未设置/没有值时才分配。
e.g.:
KDIR ?= "foo"
KDIR ?= "bar"
Run Code Online (Sandbox Code Playgroud)
测试:
echo $(KDIR)
Run Code Online (Sandbox Code Playgroud)
会打印“foo”
“+=”用于向变量附加更多文本。
例如:
objects=main.o foo.o bar.o
objects+=new.o
Run Code Online (Sandbox Code Playgroud)
这会将对象设置为main.o foo.o bar.o new.o