Makefile文件简介
来源:互联网 发布:远行星号舰船数据 编辑:程序博客网 时间:2024/06/05 12:05
Makefile文件简介
因为编译软件用的是WinAVR,其编译器是鼎鼎大名的开源编译器GCC,开源的东西虽然好用但是想要上手还得有点基本功才行,比如Makefile文件的编写对于那些习惯了KEIL C的人来说就不是很顺手了,在KEIL C等编译器中编译软件将所有编译后台工作都做好了,而WinAVR中还得自己编写Makefile文件,不过还好WinAVR自带一个MFile程序简化了Makefile文件的编写,虽然不用亲自手写Makefile文件,但是学学总是好的。
以下笔记摘自《AVR单片机GCC程序设计》第1.3节
一.目标
make 命令引入了目标(targets)的概念。Makefile 描述文件便是它的第一个目标,make 命
令必须处理至少一个目标,否则不会得出任何结果。正如我们在一个没有默认描述文件的当
前目录下敲入 make 一样,make 会输出以下的结果:
1.在项目描述文件中定义目标
一个目标通常从一行的开头开始,并后跟一个冒号。
最简单的MAKEFILE
#当前目录 D:\AVRGCC\TEST
all:
@echo hello!
#End makefile
all: 便是第一个目标
调用此描述文件结果:
D:\AVRGCC\TEST>make
hello!
2.默认目标(goal)
在上面提到过,如果调用 make 时不指定目标名则 make 总是假设在描述文件中遇
到的第一个目标是默认目标。以下示例可以非常好的说明这一问题。
具有三个目标的 makefile
#当前目录 D\AVRGCC\TEST
one:
@echo one.
Two:
@echo two.
Three:
@echo three.
#End makefile
调用 1:
D:\AVRGCC\TEST>make
one.
由于在命令行没有指定目标,make 从 makefile中找到第一个目标(one)并执行后既退
出。
调用 2:
D:\AVRGCC\TEST>maketwo
two.
由于在命令行明确指定了要执行的目标(two),make 在 makefile 中找到指定的目标,
并执行后退出。
调用 3:
D:\AVRGCC\TEST make three one two
three.
one.
two.
命令行指定了三个目标,make 一一寻找并执行。
在 makefile中非默认的目标称为可替换的目标,只有默认
的依赖关系时它们才有可能被调用。
二.依赖关系
makefile 文件按如下格式指定依赖关系:
目标 1[目标 2 … ] : [ : ][依赖 1][依赖 2] …
[命令]
如下例
#当前目录 D:\AVRGCC\TEST
one: Two
@echo one.
Two:
@echo two.
#End makefile
执行结果是:
d:\avrgcc\test>make
two.
one.
Make 首先找到第一个目标 one ,之后发现目标 one 依赖目标 Two 就先执行 Two 后才
行 one 中的命令。
三.Makefile 内容
makefile 内容可分为如下五种类型
①规则定义
语法:
目标 : 依赖
命令
...
其中目标为一个文件名或以空格分开的多个文件名,可含通配符。
例如:
%.o : %.c
avr-gcc -c $< -o $@
以上规则定义了任意一个以 .o 结尾的文件依赖于相同前缀且以.c 结尾的文件。 并
执行下边的命令获得。
规则中目标和依赖分别为 %.o 和%.c,在目标通配符 “%” 代表任意的字符串,而
在依赖中代表与目标中代表的对应字符串。
②隐含规则
隐含规则是 make 预先定义的规则,用选项 –r 可取消所有的隐含规则。
例如对于 C 程序 %.o 可以自动的从 %.c 通过命令
$(CC) -c$(CPPFLAGS) $(CFLAGS)' 生成。
③变量
变量是在 makefile 中描述一字符串的的名称。变量可用在目标、依赖、命令和
makefile 其它部分中。变量名由除‘: ’ 、 ‘#’、 ‘=’之外的字符组成,对大小写敏感。
变量的定义并赋值格式:
变量名 = 变量代表字符串
变量的引用格式:
$(变量名)
例如:
CC = avr-gcc
%.o : %.c
$(CC) -c $< -o $@
④命令
命令部分是由 make 传递到系统的字符格式的命令行的组合,在目标被创建时它们
按顺序一行一行传递到系统并执行。
字符‘@’开始的命令 在系统的输出中不显示本次的指令行。
⑤注释
字符‘# ’ 开头的行为注释行,如果注释需要换行需在行尾加 ‘ \ ’,除包含其它
MAKEFIEL 外在行的任意处可插入注释。
自动变量
在 makefile中有一组预定义的变量, 当每一规则被执行时根据目标和依赖重新计算
其值,叫作自动变量。
下面列出了常用的几个自动变量
$@ : 在规则中代表目标名,如果规则含有多个目标名它将列举所有目标。
$% : 仅在目标是存档文件的成员时起作用,代表目标。
如目标 foo.a(bar.o)中$@ 代表 foo.a $%代表 bar.o
$< : 在规则中代表第一个依赖文件名
$? : 代表在规则中所有以空格隔开的依赖文件名,如果依赖是存档文件的成员则只
有成员名被列出。
$^ : 代表在规则中所有以空格隔开的依赖文件名,如果依赖是存档文件的成员则只
有成员名被列出。
- Makefile文件编写简介
- Makefile文件简介
- Makefile文件简介
- Makefile文件简介
- makefile 简介
- MAKEFILE简介
- makefile 简介
- makefile 简介
- Makefile简介
- makefile简介
- makefile简介
- makefile 简介
- makefile简介
- Makefile简介
- Makefile---简介
- Makefile文件编写及make命令使用简介
- [001-Makefile-笔记] Makefile简介
- makefile文件
- 新博客
- 填入空隙(setbkcolor,setbkmode)
- 扯淡-Linux 内核中的 GCC 特性在程序中的应用
- sql_修改表结构
- CSS3中轻松实现渐变效果
- Makefile文件简介
- 第一篇
- R语言的流程控制
- jquerymobile-13 为list提交搜索过滤
- 包图介绍以及包图在rational中的常见操作
- Oracle ASM存储注意事项
- java并发编程之ThreadPoolExecutor
- VC中创建具有透明效果的对话框
- Oracle ASM介绍