解释广义Makefile

时间:2014-10-24 08:20:18

标签: makefile

我遇到了这段代码,很难抓住它。这个makefile中的代码非常通用我遇到了快捷方式的问题

CC = gcc
CFLAGS = -Wall
DEPS = primes.h
OBJ = go.o primes.o

%.o: %.c $(DEPS)
        $(CC) $(CFLAGS) -c -o $@ $<

go: $(OBJ)
        gcc $(CFLAGS) -o $@ $^

What does the target %.o mean ? If you wish to enter this target what will you write ?
What does its dependency mean ?
What does $@ $< mean ?
What does $@ $^ mean ?

1 个答案:

答案 0 :(得分:1)

%.o适用于以.o后缀结尾的所有文件,同样%.c适用于以.c后缀结尾的所有文件。 $<是依赖项列表中的第一项。特殊宏$@$^,它们分别是具有:的规则的左侧和右侧,以使整个编译规则更加通用。

因此,

go: $(OBJ)
        gcc $(CFLAGS) -o $@ $^

扩展为:

gcc -Wall -o go go.o primes.o

如果修改了每个目标文件go.o和primes.o,则会根据时间戳检查它们。 例如,

%.o: %.c $(DEPS)
        $(CC) $(CFLAGS) -c -o $@ $<

扩展为go.o:     go.o:go.c primes.h

即。如果go.o的时间戳早于go.c或primes.h的时间戳,则触发此规则。 而且,规则是:

gcc -Wall -c -o go.o go.c
在这种情况下,

$<扩展为go.c(第一个依赖项)