Make工程管理器
来源:互联网 发布:51单片机循迹小车 编辑:程序博客网 时间:2024/05/21 07:10
参考《从实践中学嵌入式linux C》,把里面的例子精简如下。基本上就没有太多多余文字了,单看代码和图表应该就能懂了。
Makefile结构
target : dependency_file
command
例子
Makefile里面内容
hello: hello.c gcc -c hello.c -o hello.o执行
norton@norton-laptop:~/learning/sample code/gdb_prac$ make hellogcc -c hello.c -o hello.onorton@norton-laptop:~/learning/sample code/gdb_prac$ lshello.c hello.o Makefile可以看到,通过hello这个target名称调用了它的command,从而得到hello.o
复杂点的Makefle如下;edit是可执行文件,而*.o是edit程序依赖的目标文件。
edit:main.o kdb.o command.o gcc -o edit main.o kdb.o command.omain.o:main.c def.h gcc -c main.c -o main.okdb.o:kdb.c def.h command.h gcc -c kdb.c -o kdb.ocommand.o: command.c def.h command.h gcc -c command.c -o command.oclean: rm edit main.o kdb.o command.omake工程管理器并不关心command如何工作。target不是文件,如clean不是一个文件,而是一个command的代名词。
Makefile变量
递归展开定义 VAR = var
有时候会导致无限循环。,如CFLAGS = $(CFLAGS)-O被递归展开。
简单扩展定义 VAR := var (只展开一次,避免无限循环的可能性)
变量名:
区分大小写,避免使用下划线和数字,因为可能在使用过程中,这些字符会被赋予特殊含义。
建议:使用小写作为变量名;大写作为隐含规则参数,或用户重载命令选项参数的变量名。
如上面的函数可以改为
OBJS=main.o kdb.o command.o edit:$(OBJS) gcc -o edit $(OBJS)main.o:main.c def.h gcc -c main.c -o main.okdb.o:kdb.c def.h command.h gcc -c kdb.c -o kdb.ocommand.o: command.c def.h command.h gcc -c command.c -o command.oclean: rm edit $(OBJS)
常见系统预定义的变量名
常见自动变量
利用系统变量名,修改上面的例子
OBJS=main.o kdb.o command.o CC = gccCFLAGS = -Wall -O -gedit:$(OBJS) $(CC) -o $@ $^ main.o:main.c def.h $(CC) $(CFLAGS) -c $< -o $@kdb.o:kdb.c def.h command.h $(CC) $(CFLAGS) -c $< -o $@command.o: command.c def.h command.h $(CC) $(CFLAGS) -c $< -o $@clean: rm edit $(OBJS)
-Wall是显示90%的常用debug信息,-g是为了给gdb调试。-O用于控制优化等级参考http://hi.baidu.com/317264476/item/7aba3f9438df6935336eeb1a
可见利用自动变量,就可以简化Makefile编写,在存在大量文件时,不容易写错。
隐式规则
make默认.o文件由.c编译,因此上面的脚本可以简化为如下,直接省略了类似gcc -c hello.c -o hello.o的语句
OBJS=main.o kdb.o command.o CC = gccCFLAGS = -Wall -O -gedit:$(OBJS)main.o:main.c def.hkdb.o:kdb.c def.h command.hcommand.o: command.c def.h command.hclean: rm edit $(OBJS)常见隐式规则如下
make命令参数!
执行make时候还可以输入命令,常见命令参数如下
0 0
- Make工程管理器(读书笔记)
- Make工程管理器
- Make工程管理器
- Make工程管理器
- 【Linux】工程管理器Make
- 工程管理器make
- 初识工程管理器make
- 工程管理器make(二)
- 工程管理器make
- make工程管理器
- 工程管理器make
- make工程管理器
- Linux工程管理器make
- 工程管理器make
- 工程管理器make
- make工程管理器
- 工程管理器make
- Make工程管理器
- XmlResourceParser类是怎么样解析XML文件的
- 能不能只分配内存空间,不赋初始值呢?
- live555学习之RTSP连接建立以及请求消息处理过程
- shell 获取本地IP地址
- Sqlite 简单使用方法
- Make工程管理器
- 自己动手做个极富个性化的搜索引擎
- 安卓动画----视图动画和帧动画
- CVTE2014年暑假实习生应聘
- 基于ARM11的嵌入式linux系统移植与实现--笔记二
- 三、公众帐号开发(开发模式及接口配置)
- REST,Web 服务,REST-ful 服务
- 快速幂
- (OS 10048)通常每个套接字地址 (协议/网络地址/端口) 只允许使用一次