Makefile 别名

3
请解释下面Makefile中的$@ $^:
LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

# (This should be the actual list of C files)
SRC=$(wildcard '*.c')

test: $(SRC)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)

可能是重复的问题:什么是Makefile符号$@和$<的含义? - Mark Leiber
2个回答

8
这两个符号的意义如下:
  • $@ 表示目标文件,即 test
  • $^ 表示规则的先决条件列表(在本例中是扩展通配符列表,如 SRC=$(wildcard '*.c') 所指定的)
所有这些变量都在 GNU make 手册的自动变量页面中有解释。

“expands the wildcard list as specified in SRC=$(wildcard '*.c')” 的意思是什么?它是否只会导致 '*.c' - naught101
啊,这是一个文件匹配通配符。 - naught101
@naught101 在答案的通配符列表中明确说明了,可以将其视为通配符的shell glob... :) - t0mm13b
是的。对于新手来说,这很令人困惑,因为纯通配符字符串可以用于依赖项(例如 *.c,而不是 $(wildcard '*.c')),但不能用于变量。 - naught101

2
SRC=$(wildcard '*.c')  

这只是你所有以.c结尾的源文件的文件名,比如file1.c,file2.c和file3.c等。

test: $(SRC)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)

$是在Makefile中定义变量的一种方式。

$@代表你的目标,在这种情况下,它是“test”。

$^是规则中所有先决条件的列表,包括它们所在的目录名称。

$<是所有依赖项的列表。

参考:https://www.gnu.org/software/make/manual/make.html#Automatic-Variables


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接