makefile的规则与模板

http://www.cnblogs.com/wang_yb/p/3990952.html
书写规则:

 依赖关系
 生成目标的方法

规则的语法:
target: prerequisites
command

 或者
 target: prerequisites; command
      command
      ...

prerequisites:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或者多个文件。
command:规则的命令行。是make程序所有执行的动作(任意的shell命令或者可在shell下执行的程序)

一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make此行是一个命令行。make按照命令完成相应的动作。这也是书写Makefile中容易产生,而且比较隐蔽的错误。

1、文件的依赖关系,foo.o依赖于foo.c和defs.h的文件,如果foo.c和defs.h的文件日期要比foo.o文件日期要新,或是foo.o不存在,那么依赖关系发生。
2、如果生成(或更新)foo.o文件。也就是那个cc命令,其说明了,如何生成foo.o这个文件。(当然foo.c文件include了defs.h文件)

          设置终极目标变量时,一定要注意末尾不能有空格!
#sample Makefile
edit : main.o kbd.o command.o display.o \
     insert.o search.o files.o utils.o
     cc -o edit main.o kbd.o command.o display.o \
     insert.o search.o files.o utils.o
main.o : main.c defs.h
     cc -c main.c
kbd.o : kbd.c defs.h command.h
     cc -c kbd.c
command.o : command.c defs.h command.h
     cc -c command.c
display.o : display.c defs.h buffer.h
     cc -c display.c
insert.o : insert.c defs.h buffer.h
     cc -c insert.c
search.o : search.c defs.h buffer.h
     cc -c search.c
files.o : files.c defs.h buffer.h command.h
     cc -c files.c
utils.o : utils.c defs.h
     cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

注意:反斜线之后不能有空格(这也是大家最容易犯的错误,而且错误比较隐蔽)
正确的\ 的会有高亮颜色(紫色),如果错误书写就会是黑色

 所有的.o文件既是依赖(相对于可执行文件edit),又是目标(相对于.c 和 .h文件)

所有的命令行必需以[Tab]字符开始,但并不是所有的以[Tab]键出现行都是命令行。但make程序会把出现在第一条规则之后的所有的以[Tab]字符开始的行都作为命令行来处理

 1 #RTC Makefile
  2 objs := start.o main.o beep.o uart.o \
  3         utils.o rtc.o key.o lib/libc.a
  4
  5 CC := arm-linux-gcc
  6 AR := arm-linux-ar
  7
  8 CFLAGS := -nostdinc -fno-builtin -O2 -I${shell pwd}/include
  9
 10 GOAL := rtc
 11
 12 export CC AR CFLAGS
 13
 14 $(GOAL).bin : $(objs)
 15     arm-linux-ld -Ttext 0xd0020010 $^ -o $(GOAL).elf
 16     arm-linux-objcopy -O binary $(GOAL).elf $@
 17     arm-linux-objdump -D $(GOAL).elf > $(GOAL).dis
 18
 19 lib/libc.a :
 20     cd lib; make; cd ../   
 21
 22 %.o : %.S
 23     arm-linux-gcc $(CFLAGS) -c $^ -o $@
 24
 25 %.o : %.c
 26     arm-linux-gcc $(CFLAGS) -c $^ -o $@
 27
 28 clean :
 29     cd lib; make clean; cd ../ 
 30     rm -rf *.o *.bin *.elf *.dis
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值