$@ 在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规则语法
command
...
$@就是对应targets目标集合。
举个例子具体说明:
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
这里objects包含两个目标,t1.o和t2.o,$@就代表objects,也即t1.o t2.o这个目标集合。
Linux makefile中的obj-y,请问是啥意思
obj-y += disk1/kernel/
这是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中是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
“typedef __u16 __bitwise __le16;”是啥意思?在Linux内核中是啥意思?