点击(此处)折叠或打开
- target: tar_1 tar_2 tar_3 ...
- command1
- command2
- ...
eg:
点击(此处)折叠或打开
- main: main.o stack.o maze.o
- gcc main.o stack.o maze.o -o main
- $@ ,表示规则中的目标。
- $< ,表示规则中的第一个条件。
- $? ,表示规则中所有比目标新的条件,组成一个列表,以空格分隔。
- $^ ,表示规则中的所有条件,组成一个列表,以空格分隔。
eg:上面的可以改写为:
- main: main.o stack.o maze.o
- gcc $^ -o $@
点击(此处)折叠或打开
- # default
- OUTPUT_OPTION = -o $@
- # default
- CC = cc
- # default
- COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
- %.o: %.c
- # commands to execute (built-in):
- $(COMPILE.c) $(OUTPUT_OPTION) $<
%.o 和 %.c 是一种特殊规则,称为模式规则,在上面的脚本中发现main.o没有command列表,所以make会自动寻找隐含规则,发现隐藏规则中有这样一种模式规则,main.o符合%.o的格式,则说明此时此刻 % 就等于 main. %.c 也就等于 main.c
同理,stack.o也没有command列表,则make到隐藏规则中找隐含规则, 此时% == stack。