Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142161
  • 博文数量: 40
  • 博客积分: 1131
  • 博客等级: 少尉
  • 技术积分: 459
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-16 11:50
文章分类
文章存档

2012年(2)

2011年(38)

我的朋友

分类: 嵌入式

2011-07-25 21:59:42

Makefile规则

target: dependency [denpency […]]
    command
    command

每一个命令的第一个字符必须是制表符,否则会出现“Missing Separator”错误并停止。
make如何知道更新?当目标的一个依赖或多个依赖体比目标体还新,make就会重新生成目标体。

伪目标

make也可以指定伪目标,如下,
clean:
    rm app *.o
当遇到目标体clean,由于没有依赖体,所以make认为目标体是最新的,而不去执行。
但是如果碰到有个clean的文件存在呢,那就没办法执行make clean了。怎么办?
make定义了个.PHONY特殊目标体。(make将不会查找是否已有目标体,而会直接执行命令)
.PHONY: clean
clean:
    rm app *.o

变量

递归展开变量
TOPDIR = /home/ubuntu/project
SRCDIR = $(TOPDIR)/src
简单展开变量
CC := gcc –o
CC += –O2
环境变量
make也可以读取环境变量,但是如果已有同名的变量,则外部环境变量无效。
自动变量

$@ 规则中目标所对应的文件名(目标体)
$<<> 规则中第一个相关文件名(依赖体)
$^ 规则中所有文件列表,以空格为分隔符
$? 规则中日期新于目标的所有文件列表,以空格为分隔符
$(@D) 目标文件的目录部分
$(@F) 目标文件的文件名部分

预定义变量

AR ar
AS as
CC cc (C编译程序)
CPP cpp(C预处理程序)
RM rm -f
ARFLAGS 默认值为rv
ASFLAGS 没有默认值
CFLAGS 没有默认值
CPPFLAGS 没有默认值
LDFLAGS 没有默认值
  隐式规则 模式规则

模式规则提供了扩展隐式规则的一个办法,如下例,
%.o: %.c
    $(CC) –c $(CFLAGS) $(CPPFLAGS) $< –o $@

常用命令行选项
-f 指定makefile的文件名
-Idirname 指定被包含的makefile所在的目录
-n 不执行只打印命令
-s 执行时不打印命令
-d 打印调试信息
-w 如果make在执行时改变目录,则打印当前目录名
-i 即使某个命令返回非零的退出状态值,仍继续执行
-k 即使某个目标编译失败,仍继续执行
阅读(1047) | 评论(0) | 转发(0) |
0

上一篇:GCC

下一篇:进程和同步

给主人留下些什么吧!~~