《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 ...
随机推荐
- 多测师讲解python _函数return_高级讲师肖sir
# 函数中的返回的作用: 注意点:(1)调用函数===没有加print 调用函数为空,加了print调用函数打印输出none (2)在函数中碰到return语句赋值直接返回r ...
- RLP序列化算法
RLP RLP(Recursive Length Prefix)递归长度前缀编码,是由以太坊提出的序列化/反序列化标准,相比json格式体积更小,相比protobuf对多语言的支持更强. RLP将数据 ...
- centos8平台:redis6配置启用io多线程(redis6.0.1)
一,linux平台上redis6的安装 请参见这一篇: https://www.cnblogs.com/architectforest/p/12830056.html 说明:刘宏缔的架构森林是一个专注 ...
- Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
GitHub 17k Star 的Java工程师成神之路,不来了解一下吗! GitHub 17k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 17k Star 的Java工 ...
- Eclipse JSP +Tomcat 环境搭建 错误记录
环境搭建请参考原文:https://www.cnblogs.com/james-lee/p/5964238.html 错误1:运行时,弹出如下错误:(如果没有此错误,请忽略) 原因是,我们之前点击了T ...
- java Error opening registry key 'Software\JavaSoft\Java Runtime Environment'安装jdk1.7遇到的问题
最近开发项目要求jdk在1.7以上,我先卸载了jdk1.6,下载1.7下来安装好,配置下环境变量,可以是在输入java -version的时候发现: java Error opening regist ...
- Python初识和变量基础
Python是面向对象,动态解释型和强类型的语言 编译型: 将代码一次性全部编译成二进制,然后再执行 优点:执行效率高. 缺点:开发效率低. 代表语言:C 解释型: 逐行解释成二进制,逐行运行 优点: ...
- C# 将Excel里面的数据填充到DataSet中
/// <summary> /// 将Excel表里的数据填充到DataSet中 /// </summary> /// <param name="filenam ...
- 如何对数据进行MD5加密
前端进行加密 /** * jQuery MD5 hash algorithm function * * <code> * Calculate the md5 hash of a Strin ...
- Codeforces Round #427 (Div. 2) E. The penguin's game (交互题,二进制分组)
E. The penguin's game time limit per test: 1 second memory limit per test: 256 megabytes input: stan ...