您的位置:首页操作系统Linux → 命令行Makefile和make命令讲解教程

命令行Makefile和make命令讲解教程

时间:2011/2/17 9:38:24来源:本站原创作者:佚名我要评论(1)

6 页 Makefile文件举例

六、Makefile文件举例

根据图1的依赖关系,这里给出了一个完整的makefile文件,这个例子很简单,由四个相关行组成,我们将其命名为mymakefile1。文件内容如下所示:

main: main.o f1.o f2.o
gcc -o main main.o f1.o f2.o
main.o: main.c def1.h
gcc -c main.c
f1.o: f1.c def1.h def2.h
gcc -c f1.c
f2.o: f2.c def2.h def3.h
gcc -c f2.c

注意,由于我们这里没有使用缺省名makefile 或者Makefile ,所以一定要在make命令行中加上-f选项。如果在没有任何源码的目录下执行命令“make -f Mymakefile1”的话,将收到下面的消息:

make: *** No rule to make target ‘main.c’, needed by ‘main.o’. Stop.

Make命令将makefile中的第一个目标即main作为要构建的文件,所以它会寻找构建该文件所需要的其他模块,并判断出必须使用一个称为main.c的文件。因为迄今尚未建立该文件,而makefile又不知道如何建立它,所以只好报告错误。好了,现在建立这个源文件,为简单起见,我们让头文件为空,创建头文件的具体命令如下:

$ touch def1.h
$ touch def2.h
$ touch def3.h

我们将main函数放在main.c文件中,让它调用function2和function3,但将这两个函数的定义放在另外两个源文件中。由于这些源文件含有#include命令,所以它们肯定依赖于所包含的头文件。如下所示:

/* main.c */
#include <STDLIDEF2.H>
#include “def1.h”
extern void function2();
extern void function3();
int main()
{
function2();
function3();
exit (EXIT_SUCCESS);
}
/* f1.c */
#include “def1.h”
#include “def2.h”
void function2() {
}
/* f2.c */
#include “def2.h”
#include “def3.h”
void function3()

建好源代码后,再次运行make程序,看看情况如何:

$ make -f Mymakefile1
gcc -c main.c
gcc -c f1.c
gcc -c f2.c
gcc -o main main.o f1.o f2.o
$

好了,这次顺利通过了。这说明Make命令已经正确处理了makefile描述的依赖关系,并确定出了需要建立哪些文件,以及它们的建立顺序。虽然我们在makefile 中首先列出的是如何建立main,但是make还是能够正确的判断出这些文件的处理顺序,并按相应的顺序调用规则部分规定的相应命令来创建这些文件。当这些命令执行时,make程序会按照执行情况来显示这些命令。

如今,我们对def2.h加以变动,来看看makefile能否对此作出相应的回应:

$ touch def2.h

$ make -f Mymakefile1
gcc -c f1.c
gcc -c f2.c
gcc -o main main.o f1.o f2.o
$

这说明,当Make命令读取makefile 后,只对受def2.h的变化的影响的模块进行了必要的更新,注意它的更新顺序,它先编译了C程序,最后连接生产了可执行文件。现在,让我们来看看删除目标文件后会发生什么情况,先执行删除,命令如下:

$ rm f1.o

然后运行make命令,如下所示:

$ make -f Mymakefile1
gcc -c f1.c
gcc -o main main.o f1.o f2.o
$

很好,make的行为让我们非常满意。

相关视频

    没有数据

相关阅读 Linux下Makefile的automake生成全攻略国产RPGMaker游戏《风之幻想曲》登录Steam平台makeapp怎么用 makeapp怎么一键卸妆一键卸妆app叫什么 可以一键卸妆的App是什么软件rpgmaker游戏常见问题及解决方法 rpgmaker游戏出问题怎么办cia游戏转cci格式图文教程 makerom使用教程苹果一键制作U盘启动盘教程_DiskMaker软件使用教程DiskMaker X制作Yosemite安装U盘教程

文章评论
发表评论

热门文章 Cygwin安装教程(图文)CentOS安装教程(CentOLinux系统安装Vmware图

最新文章 Linux测试网速命令是什Cygwin安装教程(图文) CentOS安装教程(CentOS 6.4图文安装)Linux系统安装Vmware图文教程Stingray Traffic Manager配置教程ubuntu u盘安装图解

人气排行 Linux系统安装Vmware图文教程Cygwin安装教程(图文)命令行Makefile和make命令讲解教程关于linux vim命令 总结CentOS安装教程(CentOS 6.4图文安装)用vnc实现windows远程连接linux桌面 vnc安装Linux系统下应用软件安装教程教你手工卸载ubuntu下的vmware系列软件