$ <和$ @在Makefile中代表什么?

Ren*_*h G 11 makefile

任何人都可以请解释的意义$<$@Makefile

And*_*ite 21

$<计算make规则中的第一个"先决条件",并$@评估make规则中的"target".

这是一个例子:

file.o : file.c
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)

在这种情况下,$<将被替换file.c,并$@file.o.

这些在通用规则中更有用,如下所示:

%.o : %.c
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅本手册.

  • 请注意,虽然以上两个示例适用于GNU Make,但它们不可移植.POSIX没有定义%规则,它定义$ <仅用于后缀规则(即Laurence Gonslaves在他的回答中显示).这些变量的标准定义可以在这里更好地阅读:http://www.opengroup.org/onlinepubs/009695399/utilities/make.html (2认同)
  • 另一方面,如果你限制自己使用GNU make,那么编写Makefile会变得容易得多.(可移植到或多或少任何所有现有平台) (2认同)

Lau*_*ves 6

$@是当前规则的目标. $<是当前规则的第一个先决条件("源")的名称.

例如:

.c.o:
        $(CC) -c $(CFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)

这将扩展为如下命令:

gcc -c -Wall -o foo.o foo.c
Run Code Online (Sandbox Code Playgroud)

另请参见GNU make手册§10.5.3,"自动变量".