我遇到了这段代码,很难抓住它。这个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 ?
答案 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
(第一个依赖项)