六、Makefile文件举例
根据图1的依赖关系,这里给出了一个完整的makefile文件,这个例子很简单,由四个相关行组成,我们将其命名为mymakefile1。文件内容如下所示:
main: main.o f1.o f2.o |
注意,由于我们这里没有使用缺省名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 |
我们将main函数放在main.c文件中,让它调用function2和function3,但将这两个函数的定义放在另外两个源文件中。由于这些源文件含有#include命令,所以它们肯定依赖于所包含的头文件。如下所示:
/* main.c */ |
建好源代码后,再次运行make程序,看看情况如何:
$ make -f Mymakefile1 |
好了,这次顺利通过了。这说明Make命令已经正确处理了makefile描述的依赖关系,并确定出了需要建立哪些文件,以及它们的建立顺序。虽然我们在makefile 中首先列出的是如何建立main,但是make还是能够正确的判断出这些文件的处理顺序,并按相应的顺序调用规则部分规定的相应命令来创建这些文件。当这些命令执行时,make程序会按照执行情况来显示这些命令。
如今,我们对def2.h加以变动,来看看makefile能否对此作出相应的回应:
$ touch def2.h $ make -f Mymakefile1 |
这说明,当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系列软件
查看所有1条评论>>