免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 888 | 回复: 0
打印 上一主题 下一主题

Make [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览
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 即使某个目标编译失败,仍继续执行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP