什么是$@和$<;在Makefile中?

什么是$@和$<;在Makefile中?,makefile,Makefile,例如在 $(CC) $(CFLAGS) -c -o $@ $< $(CC)$(CFLAGS)-c-o$@$< 它们是什么意思?$@目标的文件名。 $@ The file name of the target. $< The name of the first dependency. $x.h'来创建代码。从“x.c”和“x.h”中删除哪个文件并不重要;不管怎样,汇编都是“正确的”。我有一个旧的make衍生产品,大约在1992年,它在大多数方面与当时的Sun make兼

例如在

$(CC) $(CFLAGS) -c -o $@ $<
$(CC)$(CFLAGS)-c-o$@$<
它们是什么意思?

$@目标的文件名。
$@  The file name of the target. 

$<  The name of the first dependency. 
$<第一个依赖项的名称。

有关更多详细信息:

$@
是正在生成的目标的名称-正在创建的程序或对象文件

$x.c
'和'
echo>x.h
'来创建代码。从“x.c”和“x.h”中删除哪个文件并不重要;不管怎样,汇编都是“正确的”。我有一个旧的make衍生产品,大约在1992年,它在大多数方面与当时的Sun make兼容,但处理不当

第7版UNIX程序员手册中说:

指定了创建后缀为s2的文件的规则,该文件依赖于后缀为s1的同名文件 作为“目标”s1s2的条目。在这样的条目中,特殊宏$*代表目标名称,带有 后缀已删除,$@表示完整的目标名称,$<表示完整的先决条件列表,以及$?名单 已过期的先决条件


它没有说任何关于它在上下文之外意味着什么。我注意到,第7版“make”将列出“$的“x.c”和“x.h”,您在
make
”上读过哪些文档?Anytthing?这不正确,$<是列表中的第一个依赖项,不一定是导致重建目标的依赖项。P.S.$?是不是先决条件列表比目标更新(或者是假的),所以这些都是导致此目标重新生成的先决条件。@Beta:好吧-我想,我已经用一些历史评论解决了问题。我承认我从来没有听说过POSIX make Spec,但实验(比如你的x.c和x.h)显示了真正的情况。
program.o: program.c
    ${CC} ${CFLAGS} -c -o $@ $<
.c.o:
    ${CC} ${CFLAGS} -c -o $@ $<
all: x.o

x.o: x.c
        ${CC} ${CFLAGS} -c -o $@ $<

x.o: x.h