那些年踩过的坑---makefile模式规则

Makefile内容如下:

CC = gcc
CFLAGS = -Wall -O -g

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

执行结果:

make: *** No targets.  Stop.

很不理解,为什么我当前目录下有test.c文件,却提示错误; 于是我又试了下make test指明目标,结果使用了这条规则。

模式规则中,至少在规则的目标定义中要包含”%”,否则,就是一般的规则。目标中的”%”的值决定了依赖目标中的”%”的值,一旦依赖目标中的”%”模式被确定,那么,make 会被要求去匹配当前目录下所有的文件名,如果匹配make 就会执行规则下的命令。

说明使用这条规则必须显式或隐式的指出.o文件,不然make无法进行工作,于是修改如下即可成功获得对应的.o

SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
CC = gcc
CFLAGS = -g -O

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

all:$(OBJS)

.PHONY:clean
clean:
    rm -rf *.o

你可能感兴趣的:(makefile,模式规则)