您的位置:首页 > 其它

makefile的规则与模板

2016-10-15 01:33 204 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Makefile