博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
make运行阶段划分
阅读量:6705 次
发布时间:2019-06-25

本文共 583 字,大约阅读时间需要 1 分钟。

1 make执行分为两个阶段

第一个阶段:读makefile并且建树阶段

第二个阶段:构建目标阶段

2 扩展的立即和推迟

在第一个阶段的扩展是立即,在第二个阶段或者在需要的时候再扩展是推迟,这里的需要的时候不光是第二个阶段,也可能在第一个阶段,比如在条件判断里面用了推迟扩展的变量,那么还是会立即扩展的。

3 立即扩展的场景

扩展的不光包括变量的扩展,也包括函数的执行的扩展。

3.1 ":="形式的赋值是立即扩展

3.2 规则的目标和依赖都是立即扩展的

3.3 +=

如果前面是立即扩展的变量,那么它也是立即扩展的。

3.4 条件判断中的变量是立即的

条件语句是在读取makefile的阶段进行处理的,即第一个阶段处理的。所以,条件判断中的变量是立即扩展的。

 

4 推迟扩展的场景

4.1 “=”

4.2 规则的命令是推出扩展的

也就是说,直到命令被触发执行的时候才进行扩展。

4.3 +=

如果前面的变量是推迟扩展的,那么它也是推迟扩展的。

4.4 自动变量是推迟扩展的

自动变量直到规则的命令执行的时候才会扩展。

4.5

 

5 关于函数扩展的时机

函数的执行也是立即进行的,在读取makefile的时候就会执行,除了在等号的右边,在命令中,或者在define体中。

 

转载于:https://www.cnblogs.com/hustdc/p/7081434.html

你可能感兴趣的文章
VS2005中建立解决方案及多项目
查看>>
C语言ASM汇编内嵌语法【转】
查看>>
关于内核中spinlock的一些个人理解 【转】
查看>>
我的测试自动化框架原则设计手册(时刻更新)
查看>>
C#里巧用DateTime预设一些可选的日期范围(如本年度、本季度、本月等)
查看>>
固定高度div,随内容自动变高css定义方法
查看>>
SQL Server-聚焦深入理解动态SQL查询(三十二)
查看>>
iOS开发-NSOperation与GCD区别
查看>>
EF-InvalidOperation系列
查看>>
apache-storm-0.9.6.tar.gz的集群搭建(3节点)(图文详解)
查看>>
AngularJS 课程
查看>>
mysql处理特殊字符
查看>>
大叔也说Xamarin~Android篇~环境部署与破解
查看>>
SQL Server 索引设计指南
查看>>
naotu.baidu.com 非常棒的脑图在线工具
查看>>
MOSS中创建自定义内容类型
查看>>
将不确定变为确定~Razor视图中是否可以嵌套JS代码
查看>>
[LeetCode] Shortest Word Distance 最短单词距离
查看>>
配置Tomcat以Debug模式启动了,但却只能本地用localhost连接调试
查看>>
“HTTP Status 404 - No result defined for action ****** and result result”错误解决方法
查看>>