makefile := 这个符号和 =的区别
时间: 2023-08-13 10:08:37 浏览: 141
在 Makefile 中,:= 是一种变量赋值方式,表示变量的值是在 Makefile 解析时被赋值的,而 = 是另一种变量赋值方式,表示变量的值是在 Makefile 运行时被赋值的。因此,使用 := 赋值方式定义的变量,在整个 Makefile 中都可以使用,而使用 = 赋值方式定义的变量,只能在该变量定义后的部分中使用。
举例来说,假设 Makefile 中有以下代码:
```makefile
VAR := foo
MSG = $(VAR) bar
all:
echo $(MSG)
```
在这个例子中,使用 := 赋值方式定义了变量 VAR 的值为 foo,然后使用 = 赋值方式定义了变量 MSG 的值为 $(VAR) bar。在执行 make 命令时,会输出 foo bar。
如果将 MSG 的赋值方式改为使用 :=,则输出的结果为 foo。因为使用 := 赋值方式定义的变量 VAR 的值可以在整个 Makefile 中使用,所以在 MSG 中使用 VAR 的值时,会使用 VAR 被赋值的值 foo。
相关问题
Makefile :=
Makefile 是一种用于自动化编译程序的工具,它可以根据代码之间的依赖关系自动决定哪些文件需要重新编译,从而提高编译效率。
而 Makefile := 是一个赋值语句,它的作用是将一个变量设置为一个值。在 Makefile 中,:= 表示变量的值是在赋值时就确定的,而不是在使用时再确定的。例如:
```
CC := gcc
```
上面的语句将变量 CC 设置为 gcc,表示编译器使用 gcc。
在 Makefile 中,:= 可以和其他赋值符号一起使用,例如:
```
CFLAGS := -Wall -g
```
上面的语句将变量 CFLAGS 设置为 -Wall -g,表示编译时需要开启警告和调试信息。
需要注意的是,:= 表示变量的值是在赋值时确定的,所以如果在 Makefile 中定义了一个变量,然后在后面修改了这个变量的值,那么修改后的值将会覆盖之前的值。例如:
```
CFLAGS := -Wall
CFLAGS := $(CFLAGS) -g
```
上面的语句将变量 CFLAGS 的值先设置为 -Wall,然后又将其修改为 -Wall -g。
总之,Makefile := 是一个常用的赋值语句,用于设置变量的值。它的作用是在编译时方便地使用变量,并且可以方便地修改变量的值。
makefile中:=$=
这个符号是makefile中的赋值运算符,表示将右侧的值赋给左侧的变量。它的特点是立即展开,也就是说,右侧的值会被立即计算出来,然后赋给左侧的变量。这个符号常用于定义常量或者一些需要立即计算的变量,例如:
```
CC = gcc
CFLAGS = -Wall -O2
OBJS := $(wildcard *.o)
all:
$(CC) $(CFLAGS) $(OBJS) -o myprog
```
在上面的例子中,$:=符号将$(wildcard *.o)的结果赋给了OBJS变量,而不是使用普通的=符号。这样做的好处是,$(wildcard *.o)的结果会在赋值时立即计算出来,而不是在使用时计算,可以提高makefile的执行效率。
阅读全文