Chinaunix首页 | 论坛 | 博客
  • 博客访问: 570856
  • 博文数量: 61
  • 博客积分: 2438
  • 博客等级: 大尉
  • 技术积分: 871
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-28 08:04
文章分类
文章存档

2013年(1)

2012年(8)

2011年(15)

2010年(37)

分类: LINUX

2011-06-03 20:30:07

又一次的学习了下mkaefile
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
makefile文件的基本构成:
makefile的基本单元是规则。格式如下:
目标文件列表  分割符  依赖文件列表  [;命令]
   [命令]
   [命令]
需要注意的是:如果某一行是命令,那么需要以一个Tab开头。另外,如果某一行以Tab开头,则make默认这行为一行命令。
这里简单的书写一个makefile文件作为例子:

#make file start

#CC = gcc 默认CC为gcc
#CXX = g++ 默认CXX为g++

all : 1 20
.PHONY: all
1 : 1.o
    $(CC) -o 1 1.o
1.o : 1.c
    $(CC) -c 1.c
20 : 20.cpp
    $(CXX) -o 20 20.cpp
.PHONY: clean
clean:
    -rm -f *.o 1 20

这里在当前目录下有两个文件:1.c 20.cpp
在Makefile文件里以#开头的为注释行
在make下有预定义的一些变量,例如CC和CXX,他们俩分别代表gcc和g++
在命令行里需要引用这些变量的话就这样引用:$(CC)
这里的.PHONY(属于特殊目标)的所有依赖被作为伪目标:就是当使用make命令指定次目标时,这个目标所在规则中的命令无论是否存在都会被无条件的执行。
这里的特殊目标还有很多,在实际应用时再查相关的手册。
在makefile中有许多预定义的变量,例如:CC,CFLAGS,MAKE,MAKEFLAGS,SHELL,PWD等。。。
还有一些自动变量$@, $?, $<, $*, $<, $^, $+
$@:表示一个规则中目标文件名。
$%:当规则的目标文件是一个静态库文件时,$%代表库的一个成员名。
$<:规则中的第一个依赖文件名。
$>:和$%一样也只适用于库文件,他的值是库名
$?:所有比目标文件新的依赖文件列表,以空格分隔
$^:规则的所有依赖文件列表,使用空格分隔
$*:他的值是目标文件去掉后缀后的名称。

参考文献:
makefile是一个管理工程文件的强大工具,希望感兴趣的一起学习。
本人邮箱:qiaozqjhsy@gmail.com


阅读(1624) | 评论(0) | 转发(0) |
0

上一篇:e2fsck的用法

下一篇:Linux中的特殊权限

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