免费注册 查看新帖 |

Chinaunix

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

makefile入门之一 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-05 16:01 |只看该作者 |倒序浏览

为什么要用makefile(工程管理文件)?
------统一管理代码。

Makefile的写法:
1 目标文件
2 依赖文件
3 编译规则

一个简单makefile的例子
如图:
红:目标文件
绿:依赖文件
蓝:编译规则


Test:prog.o code.o
       Gcc –o test prog.o code.o
Prog.o:prog.c prog.h code.h
       Gcc –o prog.c –o prog.o
Code.o:code.c code.h
       Gcc –o code.c code.o
Clean:
       Rm –f *.o      


Makedfile中的变量
Makefile中的变量就象一个环境变量。事实上,环境变量在makefile中也被结实为make的变量,这些变量对大小写敏感,一般使用大写字母,几乎可以从任何地方引用定义的变量,变量的主要作用如下:
1.         保存文件列表。在前面的例子里,作为依赖文件的一些目标文件名出现在可执行文件的规则中,而这个规则的命令行里同样包含这些文件并传递给gcc作为命令参数。如果使用一个变量来保存所有的目标文件名,则可以方便的加入新的目标文件而不容易出错。
2.         保存编译器的参数。在很多源代码编译时,gcc需要很长的参数选项,如果把这组选项使用一个变量代表,那么可以把这个变量放在所有引用便宜器的地方。当改变选项的时候,只需改变一次这个变量的内容就可以。(有点象宏替换)
Makefile中的变量是用一个文本串在makefile中定义的,这个文本传就是变量的值。只要在一行的开始写下这个变量的名字,后面跟一个“=”号,以及要设定这个变量的值就可定义变量,语法是:
Varname=string
使用时:把变量用括号括起来,在前面加上$符,就可引用该变量,

${varname}

利用变量重写makefile例子:
OBJS=prog.o code.o
CC=gcc
Test:${OBJS}
       {CC}test {OBJS}
Prog.o:prog.c prog.h code.h
       {CC} –o prog.c –o prog.o
Code.o:code.c code.h
       {CC} –o code.c code.o
Clean:
       Rm –f *.o

注意:
写编译规则时要使用Tab!!!!!!

变量替换:
例:
$ {CC} $ {CFLAGS} $ {CPPFLAGS} $ {TARGET_ARCH} -C $
CFLAGS(编译器参数)   如 –W –G
CPPFLAGS(C语言预处理参数)  
TARGET_ARCH (目标机器的结构定义)

Makefile中常见自动变量
命令格式
含义

$*
不包含扩展名的目标文件名称
$+

所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$

第一个依赖文件的名称
$?

所有时间戳比目标文件晚的依赖文件,并以空格分开

$@
目标文件的完整名称
$^

所有不重复的依赖文件,以空格分开
$%

如果目标文件是归档成员,则该变量表示目标的归档成员名称





利用默认规则重新写makefile:
OBJS=prog.o code.o
CC=gcc
Test : ${OBJS}
       {CC} –o $@ $^
Prog.o:prog.c prog.h code.h
Code.o:code.c code.h
Clean:
       Rm –f *.o


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/70907/showart_727164.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP