简单的Makefile

54 篇文章 0 订阅
50 篇文章 0 订阅

例1:
CC = gcc
CFLAGS = -Wall -o -g
OBJFLAGS = -Wall -c -g

all: seqlisttest1 seqlisttest2

.PHONY: all

seqlisttest1: seqlisttest1.o seqlist.o compare.o common.o
        $(CC) $(CFLAGS) seqlisttest1 seqlisttest1.o seqlist.o compare.o common.o

seqlisttest2: seqlisttest2.o seqlist.o compare.o common.o
        $(CC) $(CFLAGS) seqlisttest2 seqlisttest2.o seqlist.o compare.o common.o

seqlisttest1.o: seqlisttest1.c common.h seqlist.h
        $(CC) $(OBJFLAGS) seqlisttest1.c

seqlisttest2.o: seqlisttest2.c common.h seqlist.h
        $(CC) $(OBJFLAGS) seqlisttest2.c

seqlist.o: seqlist.c common.h seqlist.h compare.h
        $(CC) $(OBJFLAGS) seqlist.c

common.o: common.c common.h
        $(CC) $(OBJFLAGS) common.c

compare.o: compare.c compare.h
        $(CC) $(OBJFLAGS) compare.c

.PHONY: clean
clean:
        rm *.o

因为"rm"命令并不产生"clean"文件,则每次执行"makeclean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会执行;为避免这个问题,可使用".PHONY"指明该目标。

phony 目标可以有依赖关系。当一个目录中有多个程序,将其放在一个makefile 中会更方便。因为缺省目标是makefile 中的第一个目标,通常将这个phony 目标叫做"all",其依赖文件为各个程序

make seqlisttest1    单独编译seqlisttest1可执行文件
make seqlisttest2    单独编译seqlisttest2可执行文件
make all             编译seqlisttest1和seqlisttest2可执行文件
make clean           删除.o文件

例2:
CC = gcc
INCLUDE = .
CFLAGS = -c -g -Wall
OBJS = test.o avg.o sum.o

all: test

test: $(OBJS)
        $(CC) $^ -o $@            

$^: 扩展为整个依赖文件的列表---$(OBJS)
# $@: 扩展为当前规则的目标文件---test

test.o: test.c score.h
        $(CC) -I $(INCLUDE) $(CFLAGS) test.c score.h

avg.o: avg.c score.h
        $(CC) -I $(INCLUDE) $(CFLAGS) $< -o $@    

# $<: 扩展为当前规则依赖文件列表中的第一个依赖文件---avg.c
#

sum.o: sum.c score.h
        $(CC) -I $(INCLUDE) $(CFLAGS) $< -o $@

.PHONY: clean
clean:
        rm $(OBJS)

$@: 扩展为当前规则的目标文件
$<: 扩展为当前规则依赖文件列表中的第一个依赖文件
$?: 扩展为所有的修改日期比当前规则目标文件的创建日期更晚的依赖文件,该值只有在使用显示规则的
    时候才会使用。
$*: 扩展成当前规则中目标文件和依赖文件共享的文件名,不含扩展名
$^: 扩展为整个依赖文件的列表(除了所有重复的文件名)


注意:使用gcc命令查看依赖关系
    gcc -MM ia_db.c -I include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值