Makefile 理论知识

一个完整的Makefile中,包含有:显示规则、隐式规则、变量定义、指示符、注释、伪目标。

显示规则:它描述了在何种情况下如何更新一个或者多个目标文件。书写Makefile是需要明确的给出目标文件、目标依赖文件列表以及更新目标文件需要的命令(有些规则没有命令,这样的规则只是描述文件之间的依赖关系)

隐式规则:它是make根据目标文件(典型的是根据文件名的后缀)而自动推导出来的规则。make根据目标文件名,自动产生目标的依赖文件并使用默认的命令来对目标进行更新(建立一个规则)。

变量定义:使用一个字符或字符串代表一段文本串,当定义了一个变量后,Makefile后续需要使用此文本的地方,通过引用这个变量来实现对文本串的使用。

Makefile指示符:指示符指明在make程序读取Makefile文件过程中要执行的一个动作。包括:

  • 读取一个文件,读取给定文件名的文件,将其内容作为Makefile文件中的一部分。(include filename)
  • 决定(通常是根据一个变量的值)处理或忽略Makefile中的某一特定部分。   (ifeq  )
  • 多行定义。   (define   ...   endef )

注释:Makefile中 “#”字符后的内容作为注释内容处理。如果此行的第一个非空字符为“#”,那么此行为注释行。注释行的结尾如果有反斜线(\),那么下一行也被作为注释行。

伪目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时也会讲一个伪目标称为标签。讲一个目标声明为伪目标的方法是将它作为特殊目标 .PHONY的依赖。如: .PHONY : clean

这样目标“clean”就被声明为一个目标。

make的执行过程:

  • 依次读取变量“MAKEFILES”定义的Makefile文件列表。
  • 读取工作目录下的Makefile文件(根据命名的查找顺序“GNUmakefile” “makefile” “Makefile”)
  • 依次读取工作目录Makefile文件中使用指示符“include”包含的文件
  • 查找重建所有已读取的Makefile文件的规则(如果存在一个目标是当前读取的某一个Makefile文件,则执行此规则重建此Makefile文件,完成后从第一步看是重新执行)
  • 第石化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
  • 根据“终极目标”以及其他目标的依赖关键建立依赖关系链表
  • 执行除“终极目标”以外的所有目标的规则(规则中人如果依赖文件中人一个文件的时间戳比目标文件新,则使用规则定义的命令重建目标文件)
  • 执行“终极目标”所在的规则。
时间: 2024-08-30 09:52:50

Makefile 理论知识的相关文章

TestNG学习-001-基础理论知识

此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestNG 测试框架的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! TestNG是什么?TestNG是一个灵感来自于 JUnit 和 NUnit 的一个设计用来简化广泛的测试需求的开源自动化测试框架,其引入了一些新的功能,使其功能更强大,而且易于使用,但是 TestNG 不是 JUnit 的扩展.它

堆和栈的理论知识

一.预备知识-程序的内存分配       1. 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap)-一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵.3.全局区(静态区)(static)-全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初

JDBC编程理论知识(1)

1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成. 组成JDBC的2个包: (1)java.sql.*; (2)javax.sql.*; 3.JDBC在程序中的位置: 4.JDBC的六个固定步骤 1,注册数据库驱动[利用反射] 2,取得数据库连接对象Connection 3,创建SQL对象 4,执行SQL命令,并返回结果集 5,处理结果集 6,

Android初级教程对大量数据的做分页处理理论知识

有时候要加载的数据上千条时,页面加载数据就会很慢(数据加载也属于耗时操作).因此就要考虑分页甚至分批显示.先介绍一些分页的理论知识.对于具体用在哪里,会在后续博客中更新. 分页信息 1,一共多少条数据 select count(*) from blacktb; 性能低下 原因: sql解析器先查询数据字典,把*转成所有的列名和列的类型 然后把每行数据提取出来 最后统计多少行数据 select count(常量) from blacktb; 高性能的查询 不需要每行的记录,只需要行数 2,指定每页

Winsock网络编程笔记(4)----基本的理论知识

前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsock的基本理论知识,由于是一篇笔记,鉴于看书速度有限,主要内容会慢慢地填入..错误在所难免的,希望看客更正..(*^__^*) 嘻嘻…… Winsock网络编程笔记(4)----基本的理论知识,布布扣,bubuko.com

数据库入门理论知识介绍

数据库入门理论知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1>.数据库(极难扩展): 2>.存储: 所以说做互联网的运维工程师要是把以上两点问题解决就可以轻松的搞定整个架构 2.什么是数据库: 查百度上有长篇大论了一下数据库特点,我们可以简单的理解: 数据库就是一个存放数据的仓库,这个仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数

ipv4理论知识2-分类编址、ip分类、网络标识、主机标识、地址类、地址块

分类编址 ipv4的体系结构中有分类编址和无分类编址(后续会介绍到),在分类编址时,ipv4地址分为A.B.C.D.E这5类.每类占用的IP比例和个数如下图: ipv4分类识别 计算机以二进制方式存储ipv4地址,在这种情况下可以和方便的写出一种算法,通过一个连续检查过程来查找出该ip地址的类别.流程图如下: 网络标识和主机标识 对于A.B.C类IP地址,都可以划分为网络标识和主机标识两部分.其中网络标识和主机标识的长度随地址类别的不同变化.网络标识和主机标识其实很好理解就相当于我们使用的电信的

iOS Socket理论知识

iOS Socket理论知识 序言 网络七层由下往上分别为物理层.数据链路层.网路层.传输层.会话层.表示层和应用层.其中物理层.数据链路层和网络层通常被称作媒体称,是网络工程师所研究的对象;传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议对应与应用层 TCP/UDP协议对应于传输层 IP协议对应于网络层 三者本质上没有可比性.何况HTTP协议是基于TCP连接的.TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是应用层协议,主要解决如何包装

计算机编程基础:栈、堆、堆栈概念区分及理论知识

一.预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结  构中的栈.  2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构  中的堆是两回事,分配方式倒是类似于链表,呵呵.  3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在  一块区域, 未