makefile的规则与模板
2016-10-15 01:33
204 查看
http://www.cnblogs.com/wang_yb/p/3990952.html
书写规则:
规则的语法:
target: prerequisites
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文件)
注意:反斜线之后不能有空格(这也是大家最容易犯的错误,而且错误比较隐蔽)
正确的\ 的会有高亮颜色(紫色),如果错误书写就会是黑色
所有的命令行必需以[Tab]字符开始,但并不是所有的以[Tab]键出现行都是命令行。但make程序会把出现在第一条规则之后的所有的以[Tab]字符开始的行都作为命令行来处理
书写规则:
依赖关系 生成目标的方法
规则的语法:
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的规则
- 跟我一起写 Makefile(十二) 隐含规则(转)
- Makefile 模板
- Makefile‘混和的隐含和普通规则’错误的解决
- Makefile书写规则与书写命令
- 一个linux下g++使用的 makefile 模板
- 两个编译2.4与2.6内核模块的Makefile 模板(支持交叉编译)
- makefile详解(07) 清空目标文件的规则
- makefile自动推导规则
- 对makefile中:单冒号普通规则和::双冒号规则的理解 -转
- [003-Makefile-笔记] Makefile的规则
- makefile使用隐式规则
- Linux makefile教程之隐含规则九[转]
- 简明 makefile 模板 及 makefile 教程资源汇总
- DEDECMS模板文件命名规则
- makefile双冒号规则
- Makefile讲义(9)——隐含规则
- 一个好用的Makefile模板
- 自定义 Javascript 模板规则,打造轻量级模板引擎
- Makefile学习之书写规则