Chinaunix
标题:
makefile入门之一
[打印本页]
作者:
ts_snail
时间:
2008-06-05 16:01
标题:
makefile入门之一
为什么要用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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2