【问题标题】:makefile aliases生成文件别名
【发布时间】:2011-04-25 09:02:52
【问题描述】:

请在下面的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


【解决方案1】:

这就是这两个符号的意思:

  • $@ 是目标,即test
  • $^ 是规则的先决条件列表(在本例中是 SRC=$(wildcard '*.c') 中指定的扩展通配符列表)

GNU make 手册的Automatic variables page 中解释了所有这些变量。

【讨论】:

  • “扩展SRC=$(wildcard '*.c') 中指定的通配符列表”是什么意思?它只是导致'*.c'
  • @naught101 答案通配符列表中明确说明,想想通配符的shell glob... :)
  • 是的。对于菜鸟来说,这很令人困惑,因为普通通配符字符串适用于依赖关系(例如*.c,而不是$(wildcard '*.c')),但不适用于变量。
【解决方案2】:
SRC=$(wildcard '*.c')  

这只是您所有以 .c 结尾的源文件名,即 file1.c、file2.c、file3.c 等。

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

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

$@ 是您的目标,在您的情况下它是“测试”。

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

$

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

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2020-03-16
    • 2013-08-17
    • 2017-07-20
    • 2018-02-01
    相关资源
    最近更新 更多