Makefile的一种写法

来源:互联网 发布:中信淘宝网联名信用卡 编辑:程序博客网 时间:2024/04/29 11:14

适用于目录下有较多源文件的情况


makefile 式列,例如:

CC = gccLD = gccTARGET = testSRCS = $(wildcard *.c)OBJS = $(patsubst %.c, %.o, $(SRCS))all:$(TARGET)$(TARGET):$(OBJS)    $(LD) -o $@ $^%o:%c    $(CC) -o $@ $^.PHONY:cleanclean:    rm -f $(OBJS) $(TARGET)

使用到了GNU Make 里的 ‘wildcard’ 和 ‘patsubst’ 函数, ‘wildcard’ 功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。

SRCS = $(wildcard *.c)

这行会产生一个以 ‘.c’ 结尾的文件的列表,然后存入变量 SRCS 里。

函数 ‘patsubst’(patten substitude)。有三个参数,第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的字列。

OBJS = $(patsubst %.c, %.o, $(SRCS))

这行将处理所有在 SRCS中的元素,如果它的结尾是 ‘.c’ ,就用 ‘.o’ 把 ‘.c’取代。

——————-华丽的分割线——————————————-
后缀依赖:
在makefile中使用

.SUFFIXES: .c .o

来说明.c和.o是后缀。
我们可以使用后缀依赖的方式,比如:

CC = gcc.SUFFIXES: .c .o.c.o:    $(CC) -c -o $@ $^# helloworld is a binary filehelloworld: test.o    echo $@    $(CC) -o $@ $^test.o: test.c

我们定义.c和.o为后缀。并有后缀依赖关系.c.o:。前者为前提,后者为目标。(注意,与一般的依赖关系顺序不同)
上面的test.o和test.c有依赖关系,但没有操作。make会发现该依赖关系符合.c.o的后缀依赖,并执行该后缀依赖后面的操作。
如果项目很大型的时候,后缀依赖非常有用。符合后缀依赖的文件往往有类似的操作,我们可以将这些操作用后缀依赖表示,而避免重复输入。

0 0
原创粉丝点击