Makefile简介

  在执行make之前需要一个命名为Makefile的特殊文件来告诉make需要做些什么。

  当使用 make 工具进行编译时,工程中以下几种文件在执行 make 时将会被编译 (重新编译):

    1. 所有的源文件没有被编译过,则对各个 C 源文件进行编译并进行链接,生成最后的可执行程序;

    2. 每一个在上次执行 make 之后修改过的 C 源代码文件在本次执行 make 时将会被重新编译;

    3. 头文件在上一次执行 make 之后被修改。则所有包含此头文件的 C 源文件在本次执行 make 时将会被重新编译。

  后两种情况是make只将修改过的C源文件重新编译生成.o文件,对于没有修改的文件不进行任何工作。

Makefile规则介绍

一个简单的Makefile描述规则组成:     

TARGET : PREREQUISITES
  COMMAND
  ...
  ...

  TARGET: 规则的目标。通常是最后需要生成的文件名或者为了实现这个目的而必需的中间过程文件名。

  PREREQUISITES:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或多个文件。

  command: 规则的命令行。以[tab]键开头。直接交给系统的shell执行。

  换行是以( \ )来分解的。

  默认情况下,Makefile中的第一个规则为最终目标或终极目标。

  对于.o文件作为目标的规则处理有下列三种情况:

    1. 目标.o 文件不存在,使用其描述规则创建它;

    2. 目标.o 文件存在,目标.o 文件所依赖的.c 源文件、.h 文件中的任何一个比目标.o文件“更新”(在上一次 make 之后被修改)。则根据规则重新编译生成它;

    3. 目标.o 文件存在,目标.o 文件比它的任何一个依赖文件(的.c 源文件、 .h 文件)“更新”(它的依赖文件在上一次 make 之后没有被修改),则什么也不做。

  对于终极目标,其处理方式和.o文件类似。

指定变量

由于规则的目标和依赖通常有比较多的文件,我们可以用变量进行定义,来方便我们修改。  

objects = main.o
$(objects)    //这样来使用变量

自动推导规则

  在使用make编译.c源文件时,编译.c源文件的规则命令可以不用明确给出。

  这是因为make本身有一个默认规则,能够自动完成对.c文件的编译并产生对应的.o文件。

  它执行命令“cc -c”来编译。

  书写规则建议的方式是:单目标,多依赖。就是说尽量要做到一个规则中只存在一个目标文件,可有多个依赖文件。 尽量避免使用多目标,单依赖的方式。

清除工作目录过程文件  

.PHONY:clean
clean:
  -rm *.o

    这两个实现和普通的有两点不同:

    1. 通过“ .PHONY”特殊目标将“ clean”目标声明为伪目标。避免当磁盘上存在一个名为“ clean”文件时,目标“ clean”所在规则的命令无法执行。

     2. 在命令行之前使用“ -”,意思是忽略命令“ rm”的执行错误。

  这样的一个目标不能将其作为终极目标。

  clean可以作为终极目标的依赖。

  

GNU make简要介绍①指定变量、自动推导规则、清除工作目录过程文件的更多相关文章

  1. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  2. Dalvik虚拟机简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...

  3. Android应用程序窗口(Activity)实现框架简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...

  4. ElasticSearch API 简要介绍

    调用其API会返回很多信息,例如集群的信息,节点的信息等 检查集群的状态----Restful API说明 1:检查集群状态信息 2:管理集群 3:执行 增删改查 命令 4:执行高级命令 Restfu ...

  5. HTTP协议简要介绍

    1. 网络基础 TCP/IP 通常使用的网络是在TCP/IP协议簇基础上运作的. HTTP属于它内部的一个子集. TCP/IP分为4个层次, 应用层, 传输层, 网络层, 链路层. (Applicat ...

  6. [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...

  7. [转] Android资源管理框架(Asset Manager)简要介绍和学习计划

    转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...

  8. Android资源管理框架(Asset Manager)简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分 ...

  9. Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8010977 前面我们从Android应用程序与 ...

随机推荐

  1. Javascript闭包深入解析及实现方法

    1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变量的一个引用,当函数返回时 ...

  2. knockout-validation不自动插入错误消息

    <div data-bind="validationOptions:{insertMessages:false}"> <div class="valid ...

  3. 《30天自制操作系统》06_day_学习笔记

    harib03a: 内容没有变化 :P109 从这里开始,代码开始工程化了. 将原本300多行的bootpack.c分割成了三部分: graphic.c      : 用来处理界面图像 dsctbl. ...

  4. android入门之: SharedPreferences

    读取数据: 保存数据: +++++++++++++++++++方法详解++++++++++++++++++++++++++++++ SharedPreferences综述: 使用getSharedPr ...

  5. linux网络bond技术

    http://blog.chinaunix.net/uid-20799583-id-3117665.html1.创建bond0配置文件vi /etc/sysconfig/network-scripts ...

  6. 在文件中读取、存储Json格式的字符串

    public class Weather { static readonly string FilePath = System.Environment.CurrentDirectory + @&quo ...

  7. .NET分布式事务处理总结【下】 - 包含MSMQ的分布式事务处理

    转自:http://www.cnblogs.com/daxnet/archive/2011/03/15/1984995.html .NET直接提供对MSMQ的访问支持,只需要添加System.Mess ...

  8. STL unordered_set

    http://www.cplusplus.com/reference/unordered_set/unordered_set/ template < class Key, // unordere ...

  9. HDU 1025 Constructing Roads In JGShining&amp;#39;s Kingdom (DP)

    Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which ...

  10. python中decorator

    先讲一下python中的@符号 看下面代码 @f @f2 def fun(args, args2, args3, args4, ……): pass 上面代码相当于 def fun(args, args ...