没有合适的资源?快使用搜索试试~ 我知道了~
Makefile经典教程(最掌握这部分足够).pdf
5星 · 超过95%的资源 需积分: 47 379 下载量 112 浏览量
2016-10-13
11:39:08
上传
评论 6
收藏 294KB PDF 举报
温馨提示
试读
41页
Makefile经典教程
资源推荐
资源详情
资源评论
Makefile
经典教程
0Makefile
概述
什么是
makefile
?或许很多
Winodws
的程序员都不知道这个东西,因
为那些
Windows
的
IDE
都为你做了这个工作,但我觉得要作一个好
的和
professional
的程序员,
makefile
还是要懂。这就好像现在有这么
多的
HTML
的编辑器,但如果你想成为一个专业人士,你还是要了
解
HTML
的标识的含义。特别在
Unix
下的软件编译,你就不能不自
己写
makefile
了,会不会写
makefile
,从一个侧面说明了一个人是否
具备完成大型工程的能力。
因为,
makefile
关系到了整个工程的编译规则。一个工程中的源文件
不计数,其按类型、功能、模块分别放在若干个目录中,
makefile
定
义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编
译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为
makefile
就像一个
Shell
脚本一样,其中也可以执行操作系统的命令。
makefile
带来的好处就是
——“
自动化编译
”
,一旦写好,只需要一个
make
命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make
是一个命令工具,是一个解释
makefile
中指令的命令工具,一
般来说,大多数的
IDE
都有这个命令,比如:
Delphi
的
make
,
Visual
C++
的
nmake
,
Linux
下
GNU
的
make
。可见,
makefile
都成为了一
种在工程方面的编译方法。
现在讲述如何写
makefile
的文章比较少,这是我想写这篇文章的原
因。当然,不同产商的
make
各不相同,也有不同的语法,但其本质
都是在
“
文件依赖性
”
上做文章,这里,我仅对
GNU
的
make
进行讲
述,我的环境是
RedHatLinux8.0
,
make
的版本是
3.80
。必竟,这个
make
是应用最为广泛的,也是用得最多的。而且其还是最遵循于
IEEE
1003.2-1992
标准的(
POSIX.2
)。
在这篇文档中,将以
C/C++
的源码作为我们基础,所以必然涉及一些
关于
C/C++
的编译的知识,相关于这方面的内容,还 请 各 位查看相关
的编译器的文档。这里所默认的编译器是
UNIX
下的
GCC
和
CC
。
0.1
关于程序的编译和链接
在此,我想多说关于程序编译的一些规范和方法,一 般来说,无论是
C
、
C++
、还是
pas
,首先要把源文件编译成中间代码文件,在
Windows
下也就是
.obj
文件,
UNIX
下是
.o
文件,即
ObjectFile
,这个动作
叫做编译(
compile
)。然后再把大量的
ObjectFile
合成执行文件,这
个动作叫作链接(
link
)。
编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对
于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该
只是声明,而定义应该放在
C/C++
文件中),只要所有的语法正确,
编译器就可以编译出中间目标文件。一 般来说,每个源文件都应该对
应于一个中间目标文件(
O
文件或是
OBJ
文件)。
链接时,主要是链接函数和全局变量,所以,我 们可以使用这些中间
目标文件(
O
文件或是
OBJ
文件)来链接我们的应用程序。链接器
并不管函数所在的源文件,只管函数的中间目标文件(
ObjectFile
),
在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而
在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所
以,我 们 要 给 中 间 目 标文件打个包,在
Windows
下这种包叫
“
库文件
”
(
LibraryFile)
,也就是
.lib
文件,在
UNIX
下,是
ArchiveFile
,也
就是
.a
文件。
总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成
执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被
声明。如果函数未被声明,编译器会给出一个警告,但 可以生成
Object
File
。而在链接程序时,链接器会在所有的
ObjectFile
中找寻函数的
实现,如果找不到,那到就会报链接错误码(
LinkerError
),在
VC
下,这 种 错误一般是:
Link2001
错误,意思说是说,链接器未能找到
函数的实现。你需要指定函数的
ObjectFile.
好,言归正传,
GNU
的
make
有许多的内容,闲言少叙,还是让我们
开始吧。
1Makefile
介绍
make
命令执行时,需要一个
Makefile
文件,以告诉
make
命令需要
怎么样的去编译和链接程序。
首先,我 们 用 一个示例来说明
Makefile
的书写规则。以便给大家一个
感兴认识。这个示例来源于
GNU
的
make
使用手册,在这个示例中,
我们的工程有
8
个
C
文件,和
3
个头文件,我们要写一个
Makefile
来
告诉
make
命令如何编译和链接这几个文件。我们的规则是:
1.
如果这个工程没有编译过,那么我们的所有
C
文件都要
编译并被链接。
2.
如果这个工程的某几个
C
文件被修改,那么我们只编译
被修改的
C
文件,并链接目标程序。
3.
如果这个工程的头文件被改变了,那么我们需要编译引
用了这几个头文件的
C
文件,并链接目标程序。
只要我们的
Makefile
写得够好,所有的这一切,我们只用一个
make
命令就可以完成,
make
命令会自动智能地根据当前的文件修改的情
况来确定哪些文件需要重编译,从 而 自己编译所需要的文件和链接目
标程序。
1.1Makefile
的规则
在讲述这个
Makefile
之前,还是让我们先来粗略地看一看
Makefile
的规则。
target...:prerequisites...
command
...
...
target
也就是一个目标文件,可以是
ObjectFile
,也可以是执行文件。
还可以是一个标签(
Label
),对于标签这种特性,在后续的
“
伪目标
”
章节中会有叙述。
prerequisites
就是,要生成那个
target
所需要的文件或是目标。
command
也就是
make
需要执行的命令。(任意的
Shell
命令)
这是一个文件的依赖关系,也就是说,
target
这一个或多个的目标文
件依赖于
prerequisites
中的文件,其生成规则定义在
command
中。说
白 一 点 就是说,
prerequisites
中如果有一个以上的文件比
target
文件要
新的话,
command
所定义的命令就会被执行。这就是
Makefile
的规
则。也就是
Makefile
中最核心的内容。
说到底,
Makefile
的东西就是这样一点,好像我的这篇文档也该结束
了。呵呵。还不尽然,这是
Makefile
的主线和核心,但要写好一个
Makefile
还不够,我会以后面一点一点地结合我的工作经验给你慢慢
到来。内容还多着呢。:)
1.2
一个示例
正如前面所说的,如果一个工程有
3
个头文件,和
8
个
C
文件,我们
为了完成前面所述的那三个规则,我 们 的
Makefile
应该是下面的这个
样子的。
edit:main.okbd.ocommand.odisplay.o\
insert.osearch.ofiles.outils.o
cc-oeditmain.okbd.ocommand.odisplay.o\
insert.osearch.ofiles.outils.o
main.o:main.cdefs.h
cc-cmain.c
kbd.o:kbd.cdefs.hcommand.h
cc-ckbd.c
command.o:command.cdefs.hcommand.h
剩余40页未读,继续阅读
资源评论
- AndersZhuang2017-03-14觉得经典级别,非常好的资料
- qianniao292018-07-24经典的入门资料。
HITMonk
- 粉丝: 4
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SDN相关软件包,ryn控制器,python环境等
- 基于PWM方法控制音调,支持高、低两个阶段的音调
- 524springboot + vue 在线动漫信息平台.zip(可运行源码+数据库文件+文档)
- 基于QT+QML+C++实现的显示fps帧率的控件+源码
- Java毕业设计-基于Springboot+Vue水果购物网站源码+数据库+PPT文档+演示视频(高分项目).zip
- AT Disk Imager 一个可以自动烧录树莓派镜像的软件
- 523springboot + vue 点餐平台网站.zip(可运行源码+数据库文件+文档)
- 4-2-2.zip
- 522springboot + vue 租房网站.zip(可运行源码+数据库文件+文档)
- Java毕业设计-基于Springboot+Vue大学生竞赛管理系统-源码+数据库+演示视频(高分项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功