第四课 Makefile文件的制作(下)

序言:

  前面一节课讲解了Makefile的基础知识包括原理、预定义以及命令格式,这样是可以完成一个自动编译的文件,这些知识可以帮你完成。想想mak真是强大啊,可能有些同志发现了如果项目文件太多每个目标文件都要写指令有没有其它的简化来加快开发速度,提高项目的可维护性,答案当然是有的,这就是接下来的要讲解的I?n?f?e?r?e?n?c?e? ?R?u?l?e?s?(?推?导?规?则?),有了这个推导规则是的make更强大。

原理:

  I?n?f?e?r?e?n?c?e? ?R?u?l?e?s?(?推?导?规?则?)是一个模板,它用于决定如何从一个具有某种扩展名的文件构造出一个具有另一种扩展名的文件。描述:如果看到一个目标文件calc.o,它就会自动地把后缀.c文件calc.c加入到依赖对象中,此时calc.c就是calc.o的依赖文件,并且也会推导出其shell命令:cc -c calc.c.

实践:

  说了下可能不是很明白,下面来实践一下按照之前上节课的makefile文件推导可以是如下:

EXE=calc
OBJECTS=calcmain.o calc.o
$(EXE):$(OBJECTS)    #生成可执行文件。
      cc -o $(EXE) $(OBJECTS)    #自动推导出其shell命令
calcmain.o:calc.h
      cc -c calcmain.c   #自动推导出其shell命令

  上面的例子cc指令可以不用写,因为是可以make自动推导出命令的,这也是make的隐晦规则。估计这个时候就更明白了,那么上一节课的整个Makefile文件如果是按照推导来编写又是怎样的呢,看下面:

EXE=calc
OBJECTS=calcmain.o calc.o 

$(EXE):$(OBJECTS)
       cc -o $(EXE) $(OBJECTS)
clean:
      rm -f $(EXE) $(OBJECTS)

  由于calcmain.o自动推导出calcmain.c这个可以省略,那么cc命令也自动推导出。

  今天在博客园突然检索了下自动推导结果发现一篇文章写的非常这里引用一下:http://www.cnblogs.com/wdpp/archive/2010/07/06/2386931.html,思路不清晰的可以前往观看。

第四课 Makefile文件的制作(下)

时间: 2024-07-30 00:03:05

第四课 Makefile文件的制作(下)的相关文章

第五课 Makefile文件的制作(补充)

序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点: 1.makefile的内嵌函数: 2.二级目录的编写: 3.多级目录的编写: 原理: GNU make还提供了相关的函数来帮助我们编写此文件,使得我们在编写makefile文件时更加灵活健壮.提供的函数大致分为有:处理文件名.文本内容.变量.命令四种:在这节中不会讲太多的函数甚至连最基本的去空格

【Linux探索之旅】第二部分第四课:文件操纵,鼓掌之中

内容简介 1.第二部分第四课:文件操纵,鼓掌之中 2.第二部分第五课预告:用户和权限 文件操纵,鼓掌之中 既然上一课我们学习了Linux中的文件组织方式,那么现在就该是玩弄,啊不,是操纵它们的时候了. 文件操作有哪些呢?一般就是显示文件内容啦,还有拷贝文件,移动文件,删除文件,等等. 这一课我们还会学习链接的知识,认识硬链接和软链接的区别和原理. 当然了,虽说是文件操作,但是目录操作我们也会说.因为在Linux中,一切皆文件,目录也是文件. 这一课有很重要的基础概念,而且要学不少命令,都是很常用

【转】多文件目录下makefile文件递归执行编译所有c文件

首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文件直接复制到相应目录即可方便编译出所有文件.这些makefile文件是通用的,只需根据自己的工程情况改动少许内容即可.下面会说. 总体思路是:把目标文件放在debug文件夹下的obj目录下,把最终的二进制文件放在debug文件夹下的bin目录下;如何递归编译所有除了debug目录下的makefile

多文件目录嵌套makefile文件编译当前目录c文件和子目录c文件

首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文件直接复制到相应目录即可方便编译出所有文件.这些makefile文件是通用的,只需根据自己的工程情况改动少许内容即可.下面会说. 总体思路是:把目标文件放在debug文件夹下的obj目录下,把最终的二进制文件放在debug文件夹下的bin目录下;如何递归编译所有除了debug目录下的makefile

第四课 文件系统(下)

====================第四课 文件系统(下)==================== 一.sync/fsync/fdatasync------------------------ 1. 大多数磁盘I/O都通过缓冲进行, 写入文件其实只是写入缓冲区,直到缓冲区满, 才将其排入写队列. 2. 延迟写降低了写操作的次数,提高了写操作的效率, 但可能导致磁盘文件与缓冲区数据不同步. 3. sync/fsync/fdatasync用于强制磁盘文件与缓冲区同步. 4. sync将所有被修改

【Linux探索之旅】第四部分第三课:文件传输,潇洒同步

内容简介 1.第四部分第三课:文件传输,潇洒同步 2.第四部分第四课:分析网络,隔离防火 文件传输,潇洒同步 这一课的内容相对简单,所以我们慢慢享用. 经过上一课的学习,我们已经知道如何远程连接到其他电脑了.从今以后,你就可以在自己的电脑上运行命令,来控制远方的另一台电脑了,很酷吧. 我们继续探究Linux的奇幻网络世界.这个网络世界比较特别,也许你已经有所体会:前辈们做了大量努力,靠加密方法来保证网络间传输的数据的安全,以防我们私人的信息泄露,例如密码. 这一课我们来学习文件传输,主要分为以下

Makefile文件(四)_书写命令

变量说明: [email protected]       --->      目标文件 $^       --->       所有的依赖文件 $<       --->       第一个依赖文件 一.显示命令 @echo 正在编译xx模块...... 当make执行时,会输出"正在编译xx模块......",但不会输出命令 echo 正在编译xx模块...... make将输出:echo 正在编译xx模块......  正在编译xx模块...... 说明:

C语言Makefile文件制作

本文摘抄自"跟我一起写Makefile ",只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile 写完之后才发现基本上都是一些比较枯燥的规则,看看一.二.八三个部分就可以了.当作参考工具吧,什么时候用到了再来看看. 一.概述 我所使用的make 版本是 GNU Make 3.81,使用的系统是

linux下使用automake工具自动生成makefile文件

linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Automake的工具,用来自动生成makefile文件,为编译和安装程序提供了一个方便快捷的入口. 一.首先检查是否安装了autotools工具 使用which命令    aclocal    autoscan    autoconf    autoheader    automake 二.安装aut