makefile中:=
时间: 2023-09-25 21:13:24 浏览: 47
在Makefile语法中,:=是一种赋值方式,用于将变量定义为简单变量。这种方式定义的变量是非递归的,即变量的值在定义时被计算,而不是在使用时被计算。
例如,以下是在Makefile中使用:=定义变量的示例:
```
SRC_FILES := main.cpp foo.cpp bar.cpp
```
这个语句定义了一个名为SRC_FILES的变量,它包含了三个源文件的文件名。在这个例子中,SRC_FILES是一个简单变量,其值在定义时被计算。
如果要将一个变量定义为递归变量,可以使用Makefile中的另一种赋值方式,即使用=运算符:
```
SRC_FILES = $(wildcard *.cpp)
```
这个语句定义了一个名为SRC_FILES的变量,它包含了当前目录下所有的.cpp文件的文件名。在这个例子中,SRC_FILES是一个递归变量,其值在使用时被计算。
需要注意的是,在Makefile中,变量的作用域是全局的,即在整个Makefile中,所有的规则和命令都可以访问同一组变量。因此,需要谨慎使用变量,避免不必要的命名冲突。
相关问题
makefile中:=$=
在makefile中,:=$=是一个无效的语法。在makefile中,:=是一个赋值运算符,用于将变量赋值为一个表达式的结果,例如:
```
foo := bar
```
这将把变量foo赋值为字符串"bar"。
另外,$是makefile中的变量引用符号,用于引用已定义的变量的值,例如:
```
$(foo)
```
这将引用变量foo的值。
makefile中:=和?=有什么区别
在 Makefile 中,:= 和 ?= 都是赋值运算符,但它们的作用有所不同。
:= 是一种简单的赋值运算符,它表示立即展开,就是在赋值的时候就进行展开,而不是等到使用变量的时候再进行展开。这意味着,如果你在 Makefile 中使用 := 来定义一个变量,那么这个变量的值将在 Makefile 中的任何地方都可用,且其值不会受到后续的变化影响。
?= 是一种条件赋值运算符,它表示如果变量未被定义,则对其进行赋值。即,如果变量已经被定义,则不再重新赋值;否则,就将右侧的值赋给该变量。这种赋值方式可以用来定义默认值。
举个例子,假设在 Makefile 中,我们定义了一个变量 CC:
```
CC = gcc
```
如果我们使用 := 来重新定义 CC:
```
CC := clang
```
那么 CC 的值就会变成 clang。
而如果我们使用 ?= 来定义 CC 的默认值:
```
CC ?= gcc
```
那么如果 CC 已经被定义过,它的值不会改变,仍然是原来的值;否则,它的值就会被设置为 gcc。
总之,:= 是立即展开的赋值运算符,? = 是条件赋值运算符。