makefile 语句 $= 什么意思 举例说明
时间: 2024-05-05 22:22:50 浏览: 9
在 Makefile 中,`$=` 是赋值语句,用于将右侧的值赋给左侧的变量。它与 `:=` 和 `=` 的区别在于,它可以在变量定义后被重新赋值,而不会影响之前定义的规则中使用该变量的值。
举个例子,假设我们有以下 Makefile:
```
foo = hello
bar $= world
all:
@echo "$(foo) $(bar)"
@$(MAKE) baz
baz:
@echo "$(foo) $(bar)"
bar $= everyone
```
在这个 Makefile 中,`foo` 与 `bar` 都是变量,`foo` 使用的是 `=` 赋值,而 `bar` 使用的是 `$=` 赋值。
在 `all` 规则中,我们首先输出 `$(foo) $(bar)` 的值,即 `hello world`。然后调用 `baz` 规则。
在 `baz` 规则中,我们再次输出 `$(foo) $(bar)` 的值,但是此时 `bar` 的值已经被重新赋值为 `everyone`,因此输出的是 `hello everyone`。
总之,`$=` 赋值语句可以用于动态修改变量的值,以实现更灵活的 Makefile 编写。
相关问题
makefile中 $=
在makefile中,$=是一个变量赋值符号,它表示将右边的值赋给左边的变量。与其他赋值符号不同的是,$=是递归展开的,也就是说,它允许在变量定义中使用其他变量。例如:
```
FOO = bar
BAZ = $(FOO)baz
```
这里,定义了一个名为FOO的变量,并将其赋值为bar。接着,定义了一个名为BAZ的变量,并将其赋值为$(FOO)baz。由于$=是递归展开的,所以$(FOO)会被展开为bar,因此BAZ的最终值为barbaz。
需要注意的是,$=的递归展开可能会导致一些问题,特别是在定义复杂的变量时。为了避免这种情况,可以使用其他赋值符号,如:=或?=,它们不会递归展开。
makefile中$=
在 Makefile 中,$= 表示将所赋的值展开为一个被定义过的变量,在定义时可以使用一个或多个已经定义的变量和其它一些字符串拼接而成,从而实现复用。
举个例子,假设有如下定义:
```
NAME=foo
TAG=latest
IMAGE_NAME=$(NAME):$(TAG)
```
则在使用时可以这样引用:
```
docker build -t $(IMAGE_NAME) .
```
这样就可以将变量 NAME 和 TAG 的值拼接成 IMAGE_NAME 变量的值了。