$@ 在Linux Makefile中是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$@ 在Linux Makefile中是啥意思相关的知识,希望对你有一定的参考价值。

如题哦

$@是makefile中的自动化变量
表示规则的目标文件名。如果目标是一个文档文件(Linux中,一般称.a文件为文档文件,也称为静态库文件),那么它代表这个文档的文件名。在多目标模式规则中,它代表的是哪个触发规则被执行的目标文件名。
例如:
foo.o:foo.p
pc $< -o $@
$@代表foo.o
详细见GNU make -man
参考技术A 这个变量是 shell 的, makefile 用的就是 bash.
$@ 表示所有输入变量.
参考技术B

$@是Makfile里的一种自动化变量,代表目前规则中所有的目标的集合,在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。

Makefile规则语法

targets : prerequisites
command
...

$@就是对应targets目标集合。


举个例子具体说明:

objects = t1.o t2.o
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@

 这里objects包含两个目标,t1.o和t2.o,$@就代表objects,也即t1.o t2.o这个目标集合。

参考技术C $@: 表示规则中的目标文件名。

Linux makefile中的obj-y,请问是啥意思

obj-y += disk1/kernel/
这是makefile中的一段,这么写是什么意思呢?

参考技术A 意思是吧disk1/kernel/目录下的文件编译进内核, -y是编译进内核,-m是编译成模块 参考技术B 目标定义是Kbuild Makefile的主要部分,也是核心部分。主要是定义了要编译的文件,所有的选项,以及到哪些子目录去执行递归操作。 最简单的Kbuild makefile 只包含一行:
例子:
obj-y += foo.o 该例子告诉Kbuild在这目录里,有一个名为foo.o的目标文件。foo.o将从foo.c 或foo.S文件编译得到。
如果foo.o要编译成一模块,那就要用obj-m了。所采用的形式如下:
obj-y += /usr/kernel/ 表示该目录下的对应所有文件生成的 .o 目标文件。
例子:
obj-$(CONFIG_FOO) += foo.o $(CONFIG_FOO)可以为y(编译进内核) 或m(编译成模块)。如果CONFIG_FOO不是y 和m,那么该文件就不会被编译联接了

除了y、m以外的obj-x 形式的目标都不会被编译。
除了obj-形式的目标以外,还有lib-y library 库、hostprogs-y 主机程序等。
参考技术C 编译disk1/kernel/整个目录下的文件。本回答被提问者采纳

以上是关于$@ 在Linux Makefile中是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

$$在linux脚本中是啥意思? [复制]

“typedef __u16 __bitwise __le16;”是啥意思?在Linux内核中是啥意思?

Linux makefile中的obj-y,请问是啥意思

Makefile 中 .PHONY 的用途是啥?

嵌入式linux,Makefile: := ?= +=分别是啥意思?

帮忙解释下面这段Linux kernel中的Makefile语句是啥意思?