《GNU_Makefile》——第3章,Makefile总述
1.makefile的内容
一个完整的makefile包含5个东西:
显示规则,隐含规则,变量定义,指示符,注释
(1)显示规则
描述如何更新目标文件。
(2)隐含规则
make程序内置的规则。
make根据目标文件名(后缀)推导出依赖文件,并使用默认的命令对目标进行更新
(3)变量定义
使用一个字符或字符串代表一个文本串
(4)指示符
指明make读取makefile文件时,要执行的动作。
【1】读取一个文件,如 -f
【2】处理或忽略makefile中特定部分,如 条件执行(ifeq, ifneq, ifdef, ifndef)
【3】定义一个多行变量,如 define
(5)注释
用 #,连接符 \
2. 指定首个makefile文件
make默认读取本目录的makefile文件。
使用 make -f xxx, 来显示指定。
3.包含其他makefile文件
使用指示符 include
include FILENAMES...
include指示符命令make暂停当前makefile文件读取,去读取include指定的文件,完成后,继续读取当前makefile文件。
如果include 指定的文件,不是用绝对路径描述,则make会在命令行参数 -I 或 --include-dir 指定的目录查找该文件,若没找到则在 /usr/gnu/include /usr/local/include /usr/include 中查找
若依旧没找到include指定的文件,make不会退出,只会报警告。当解析阶段结束,进入运行阶段,make会尝试使用规则创建该文件,若无法创建,则会报错退出。
Make: *** No rule to make target ‘<filename>’. Stop
若不希望因为无法加载或创建文件导致报错,可以使用 -include 或 sinclude。
4.MAKEFILES
若设置了 MAKEFILES 环境变量,make会先读取该变量指定的makefile文件。
5.MAKEFILE_LIST
当make读取了多个makefile文件,在对这些文件进行执行前,会将其名字追加到 MAKEFILE_LIST 。
可以这样使用
name1 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
include inc.mk
name2 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
all:
@echo name1 = $(name1)
@echo name2 = $(name2)
运行结果
name1 = Makefile
name2 = inc.mk
6.
7.
8.
9.make如何解析makefile文件
GNUmake执行分为两阶段
第一阶段(解析):读取所有makefile文件,构建目标依赖关系树。
第二阶段(运行):根据关系树和时间戳,使用规则,更新过期了的目标。
10.总结
make的执行过程如下:
(1)读取所有makefile文件(通过MAKEFILES环境变量,-f命令行参数,include指示符确定makefile文件)
(2)查找重建所有已读取makefile文件的规则。
(3)初始化并展开立即展开变量和函数,并根据条件判断确定执行分支
(4)根据终极目标和目标依赖关系建立关系树
(5)根据时间戳和依赖关系树更新过期的目标
《GNU_Makefile》——第3章,Makefile总述的更多相关文章
- [转] Makefile 基础 (2) —— Makefile 总述
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- Makefile总述②文件命名、包含其他文件makefile、变量、重建重载、解析
Makefile的内容 在一个完整的 Makefile 中,包含了 5 个东西:显式规则.隐含规则.变量定义.指示符和注释. 显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件( Ma ...
- makefile笔记2 - makefile总述
一.makefile的组成 Makefile 里主要包含了五个东西:显示规则.隐晦规则.变量定义.文件指示和注释. 1. 显示规则.显示规则说明了,如何生成一个或多的的目标文件.这是由 Makefil ...
- 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序
很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...
- Linux makefile教程之总述二[转]
Makefile 总述——————— 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或 ...
- Web应用程序系统的多用户权限控制设计及实现-总述【1】
中大型的Web系统开发均需要权限的配置,基于多角色,多用户的操作权限管理是一个系统开发的基础.搭建好一套权限,用户,角色,页面一体的开发架构,可以用于后期业务的开发,同时也可用于不同业务的系统开发. ...
- Solr4.8.0源码分析(5)之查询流程分析总述
Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilt ...
- 自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述
自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述 自顶向下深入分析Netty(七)--ChannelPipeline源码实现 自顶向下深入分析Net ...
- 自顶向下深入分析Netty(六)--Channel总述
自顶向下深入分析Netty(六)--Channel总述 自顶向下深入分析Netty(六)--Channel源码实现 6.1 总述 6.1.1 Channel JDK中的Channel是通讯的载体,而N ...
随机推荐
- MeteoInfoLab脚本示例:加载图片和透明图层
MeteoInfoLab的georead函数提供了读取shape文件.image文件(JPG.PNG等,需要有相应的地理定位文件)文件生成图层的功能(事实上shaperead也是同样的功能,不过函数名 ...
- c3算法
# L(G) = [G] + [O] # G = [O] # = GO # L[E] = EO # L[F] = [F] + [GO] # F = [GO] # = FGO # L[B] = [B] ...
- Verilog基础入门——简单的语句块编写(二)
[题干] [代码] module top_module( input a, input b, output out ); assign out = a&b; endmodule [与或非门等] ...
- python 读取文件时报错UnicodeDecodeError
python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...
- 利用Image对象,建立Javascript前台错误日志记录
手记:摘自Javascript高级程序设计(第三版),利用Image对象发送请求,确实有很多优点,有时候这也许就是一个创意点,再次做个笔记供自己和大家参考. 原文: 开发 Web 应用程序过程中的一种 ...
- vbox挂载共享文件夹
版权 挂载共享文件夹很简单,有2种方法,1是自动挂载,2是手动挂载. 一.自动挂载步骤: 1,把想共享的文件夹设置为共享. 2,在virtualbox界面对虚拟机设置共享文件夹,如下图.
- mock.js 学习
安装 npm install mockjs 使用 // 引入 import Mock from 'mockjs' Mock.setup({ timeout: '200 - 400' }) const ...
- Redis---08Redis集群(一)
一.什么是Redis集群 Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N. Redis 集群通过分区(parti ...
- mysql 事务的日志
事务的日志 1.redo log redo:"重做",记录的是,内存数据页的变化过程 1)作用 在事务ACID过程中,实现的是 "D" 持久化的作用. 2)工作 ...
- 运行Apache时出现the requested operation has failed
在修改自己主机E:\wamp\apache\conf中的httpd.conf中的站点位置后,重新运行Apache时,出现对话框提示"the requested operation has f ...