1序言:

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

2原理:

  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.

3实践:

  说了下可能不是很明白,下面来实践一下按照之前上节课的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文件的制作(下)的更多相关文章

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

    序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点 ...

  2. 第三课 Makefile文件的制作(上)

    1.序言: 前面的课程讲解了从gcc编译过程到其实践,大家可以看到其实在这些步骤中有些是可以简化编译的,但由于参数多以及项目中文件数量多的原因难免会造成错误甚至是浪费大量的时间在这编译上,为此linu ...

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

    内容简介 1.第二部分第四课:文件操纵,鼓掌之中 2.第二部分第五课预告:用户和权限 文件操纵,鼓掌之中 既然上一课我们学习了Linux中的文件组织方式,那么现在就该是玩弄,啊不,是操纵它们的时候了. ...

  4. 多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

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

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  6. 让你提前认识软件开发(17):makefile文件的书写及应用

    第1部分 又一次认识C语言 makefile文件的书写及应用 [文章摘要] makefile用于Linux下整个project的编译.对于Linux下的C/C++语言的编译是至关重要的. 本文以实际的 ...

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

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

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

    内容简单介绍 .第四部分第三课:文件传输.潇洒同步 2.第四部分第四课:分析网络.隔离防火 文件传输.潇洒同步 这一课的内容相对简单,所以我们慢慢享用. 经过上一课的学习.我们已经知道怎样远程连接到其 ...

  9. C语言Makefile文件制作

    本文摘抄自“跟我一起写Makefile ”,只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org.cn/%E8%B7% ...

随机推荐

  1. C0302 将一个代码块中的内容保存在文件中, 查看一个rpm包是否可以安装

    #!/bin/bash # 这个脚本是用来描述和确认是否可以安装一个rpm包 # 在一个文件中保存输出 SUCCESS=0 E_NOARGS=65 if [ -z "$1" ] t ...

  2. PHP输出javascript,alert中文乱码解决办法

    echo '<html><head><meta http-equiv="Content-Type" content="text/html; ...

  3. C++ 类的多态三(多态的原理--虚函数指针--子类虚函数指针初始化)

    //多态的原理--虚函数指针--子类虚函数指针初始化 #include<iostream> using namespace std; /* 多态的实现原理(有自己猜想部分) 基础知识: 类 ...

  4. Hadoop分布式文件系统--HDFS结构分析

    转自:http://blog.csdn.net/androidlushangderen/article/details/47377543 HDFS系列:http://blog.csdn.net/And ...

  5. 安装Node.js以及Hexo

    安装前提 安装 Hexo 相当简单.然而在安装前,您必须检查电脑中是否已安装下列应用程序: Node.js 如何在Ubuntu上安装最新版本的Node.js https://hexo.io/zh-cn ...

  6. win7(64位)+vs2008配置Directshow

    参考链接:http://zhuyanfeng.com/archives/1663 PC环境:win7 64bit + vs2008 1.下载64位的win7 SDK2.安装过程中遇到错误(必须要卸载v ...

  7. [转帖收集] Java注解

    1.Annotation 它的作用是修饰编程元素.什么是编程元素呢?例如:包.类.构造方法.方法.成员变量等.Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和任何元数据( ...

  8. Web API中的模型验证Model Validation

    数据注释 在ASP.NET Web API中,您可以使用System.ComponentModel.DataAnnotations命名空间中的属性为模型上的属性设置验证规则. using System ...

  9. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...

  10. 全局最小割模板(定S,不定T,找最小割)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...