【Makefile由浅入深完全学习记录7】Makefile中变量的高级主题下

加qq:1126137994 微信:liu1126137994 一起学习更多技术~

继续上一篇文章关于变量的学习!

1、环境变量(全局变量)

-makefile中能够直接使用环境变量的值

  • 如果makefile中定义了同名变量,则环境变量将被覆盖
  • 运行make时,指定“-e”选项,优先使用环境变量

-为什么要在makefile中使用环境变量

优势:
环境变量可以在所有的makefile中使用

劣势:
过多的依赖于环境变量,会导致移植性降低

-变量在不同makefile之间的传递方式

  • 直接在外部定义环境变量进行传递
  • 使用export定义变量进行传递(定义临时环境变量)
  • 定义make命令行变量进行传递(推荐)

下面看两个例子,来深刻理解上面的理论:

下面是makefile 的文件:

JAVA_HOME := java home
export var := D.T.Software
new := TDelphitest :@echo "JAVA_HOME => $(JAVA_HOME)"@echo "make another file ..."@$(MAKE) -f makefile.2@$(MAKE) -f makefile.2 new:=$(new)

下面是makefile.2的文件:

test:@echo "JAVA_HOME => $(JAVA_HOME)"@echo "var => $(var)"@echo "new => $(new)"

在命令行输入make 显示:
这里写图片描述

输入make -e new=lyy 显示:
这里写图片描述

2、目标变量(局部变量)

-作用域只在指定的目标以及连带的规则中
这里写图片描述

3、模式变量

-模式变量是目标变量的扩展

-作用域只在***符合模式***的目标及连带规则中

这里写图片描述

下面看一个例子:


var := D.T.Software
new := TDelphitest : var := test-var
%e : override new := test-new
%a : override new := test-new2test : another@echo "test :"@echo "var => $(var)"@echo "new => $(new)"another :@echo "another :"@echo "var => $(var)"@echo "new => $(new)"rule :@echo "rule :"@echo "var => $(var)"@echo "new => $(new)"

输入:make 显示:
这里写图片描述

可以看见变量var最终是取的:test : var := test-var 这个目标变量,而不是文件变量:var := D.T.Software

输入 make rule 显示:
这里写图片描述

可以看出,new这个变量,取的是:%e : override new := test-new 模式匹配的变量,而不是文件变量new := TDelphi

总结:

  1. 全局变量:makefile外部定义的环境变量
  2. 文件变量:makefile中定义的变量
  3. 局部变量:指定目标的变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Makefile由浅入深完全学习记录8】条件判断语句

加qq:1126137994 微信:liu1126137994 一起学习更多技术~ 今天来学习Makefile中条件判断语句! Makefile也算是一门语言,它有自己的语法,那么它应该也会像C/C语言一样,支持条件判断语句! Makef…

C语言实现位数组(bit数组)与位数组的简单应用举例

学习交流加(可免费帮忙下载CSDN资源):个人微信: liu1126137994学习交流资源分享qq群1(已满): 962535112学习交流资源分享qq群2: 780902027 今天有朋友遇到一个笔试题:一个…

【常见笔试面试算法题12】动态规划算法案例分析

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 文章目录1、暴力搜索方法2、记忆搜索方法3、动态规划方法4、各种动态规划方法案例总结:给定数组arr,arr中所有数都为正数&…

kafka 思维导图

最近在培训沟通力过程中,一句话说的特别好,有输入就要有输出,最近又学习了一遍kafka 给大家分享一下

【C++深度剖析教程28】C++对象模型分析

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 今天记录学习的内容是:C对象模型分析!!! 本质分析: class是一种特殊的struct 在内存中cl…

【C++深度剖析教程29】C++对象模型分析下

加qq1126137994,微信:liu1126137994 一起学习更多技术!!! 今天来继续学习C对象模型! 在C编译器内部,类可以理解为结构体子类是由父类成员叠加子类新成员得到的 下面来写一个程序分析C的继承…

java 思维导图

最近有时间,又整理了一下java 思维导图,持续优化中 子模块拆分总结:java基础 java思维导图 总结

【常见笔试面试算法题12续集一】动态规划算法案例1台阶问题练习题

加qq1126137994 一起学习更多技术!!! 以下问题,都可以用非动态规划的方法做,我为了整理动态规划的方法思路,就全部用动态规划的思路来解决问题,这样还可以简化问题的处理,是时间复杂…

linux 思维导图

工作中使用总结的linux 分享一下

【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题

加qq1126137994 一起学习更多技术!!! 有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的…

mysql数据库思维导图

先前总结的一下数据库的思维导图,和大家分享一下,持续更新; 最近面试数据仓库工程师,过程中,问到索引类型,只是记得,普通索引,唯一索引,还有主键,面试中让说…

【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。 给定一个序列arr及它的长度n(长度小…

【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A"1A2C3D4B56”,B"B1D23CA45B6A”&am…

hive 思维导图

1.整理了word文档,但是感觉没有思维导图清晰 ,持续更新中 ​ hive 工作中分享。

结构思考力思维导图

个人提升,喜欢钻研的同时,需要增加一下,其他方面的知识,分享一下:

常用内存分配函数的说明

下面哪种C/C 分配内存的方法会将分配的空间初始化为0 A malloc() B calloc() C realloc() D new[ ] 1) malloc 函数: void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配…

前端学习(120):css精灵和好处

精灵图的目的:很多大型网站在首次加载的时候需要加载很多小图片,如果在同一时间,服务器又拥堵的话,就会导致页面加载慢。为了解决这一问题,就用了精灵图来解决加载时间过长影响用户体验的问题。 精灵图的本质&#xf…

shell 思维导图

分享一下;

Linux 总线、设备、驱动模型的探究

学习交流加 个人qq:1126137994 个人微信:liu1126137994 学习交流资源分享qq群:962535112之前一直做项目,做项目的过程虽然也学习到了不少知识,但是,一直没有好好研究总线设备驱动的机制,今天来学…