Makefile 基本用法

mac2026-03-14  6

Makefile 001_Makefile的引入及规则 使用keil, mdk, avr等工具开发程序时点点鼠标就可以编译了, 它的内部机制是什么?它怎么组织管理程序?怎么决定编译哪一个文件? gcc -o test a.c b.c // 简单, // 但是会对所有文件都处理一次, // 文件多时如果只修改其中一个文件会导致效率低 编译过程: (1)预处理 (2)编译 (3)汇编 (4)链接 a.c=>xxx.s=>xxx.o\ ==>test b.c=>yyy.s=>yyy.o/ ============================================= test: a.o b.o gcc -o test a.o b.o a.o:a.c gcc -c -o a.o a.c b.o:b.c gcc -c -o b.o b.c =========================================== make: 修改,执行make gcc -c -o a.o a.c gcc -o test a.o b.o ========================== 第一次make三条命令都执行 ========================= Makefile的核心---规则 : 目标 : 依赖1 依赖2 ... [TAB]命令 注意:当"目标文件"不存在, 或 某个依赖文件比目标文件"新", 则: 执行"命令" ********************************************************** 002_Makefile的语法 a. 通配符: %.o $@ 表示目标 $< 表示第1个依赖文件 $^ 表示所有依赖文件 b. 假想目标: .PHONY c. 即时变量、延时变量, export 简单变量(即时变量) : A := xxx # A的值即刻确定,在定义时即确定 B = xxx # B的值使用到时才确定 := # 即时变量 = # 延时变量 ?= # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句 += # 附加, 它是即时变量还是延时变量取决于前面的定义 参考文档: a. 百度搜 "gnu make 于凤昌" b. 官方文档: http://www.gnu.org/software/make/manual/ 如果想深入, 可以学习这视频: 第3期视频项目1, 第1课第4节_数码相框_编写通用的Makefile_P 003_Makefile函数 a. $(foreach var,list,text) b. $(filter pattern...,text) # 在text中取出符合patten格式的值 $(filter-out pattern...,text) # 在text中取出不符合patten格式的值 c. $(wildcard pattern) # pattern定义了文件名的格式, # wildcard取出其中存在的文件 d. $(patsubst pattern,replacement,$(var)) # 从列表中取出每一个值 # 如果符合pattern # 则替换为replacement 004_Makefile实例 a. 改进: 支持头文件依赖 http://blog.csdn.net/qq1452008/article/details/50855810 gcc -M c.c // 打印出依赖 gcc -M -MF c.d c.c // 把依赖写入文件c.d gcc -c -o c.o c.c -MD -MF c.d // 编译c.o, 把依赖写入文件c.d b. 添加CFLAGS c. 分析裸板Makefile

 

最新回复(0)