makefile里的#$@
时间: 2023-10-02 07:04:45 浏览: 142
在Makefile中,`#$@`是一个自动化变量,它代表了当前目标的名称。当Makefile中有多个目标需要生成时,可以使用`#$@`来引用当前正在生成的目标名称,以便在命令中使用该名称。
例如,以下Makefile中的目标`hello`和`world`使用了`#$@`变量来打印当前正在生成的目标名称:
```
hello:
@echo "Hello, #$@!"
world:
@echo "Hello, #$@!"
```
当执行`make hello`命令时,输出为:
```
Hello, hello!
```
当执行`make world`命令时,输出为:
```
Hello, world!
```
相关问题
makefile里的$@
在 Makefile 中,$@ 表示规则中的目标文件名。它是一个自动化变量,代表当前规则的目标文件。例如:
```
target: dependency
command
```
在上面的规则中,$@ 就代表 target。
当 Makefile 执行这个规则时,会检查 target 是否存在或者是否需要更新。如果需要更新,就会执行规则中的 command 命令,其中可以使用 $@ 来代表规则中的目标文件名。
例如:假设有一个 Makefile 规则如下:
```
hello: main.c hello.c
gcc -o $@ $^
```
这个规则表示如果 main.c 或者 hello.c 有更新,就需要重新编译生成可执行文件 hello。$@ 代表的是规则中的目标文件名 hello,$^ 代表的是规则中的所有依赖文件,即 main.c 和 hello.c。因此,上面的规则相当于执行了以下命令:
```
gcc -o hello main.c hello.c
```
$(sub_makefile, ,$@)
这是一个 makefile 中的函数,用于获取一个变量中的子目录 makefile 文件名。具体来说,它会从变量 $@ 中获取一个文件名,然后使用函数 $(subst) 将其替换为空字符串,最终得到的就是一个目录名。然后函数 $(addsuffix) 会在这个目录名后面添加一个后缀名 ".mk",得到子目录中的 makefile 文件名。
阅读全文