zoukankan      html  css  js  c++  java
  • 第六篇 变量的高级主题(上)

     上一节中我们分享了变量的定义与使用,这一节我们来研究一下变量值得替换,具体语法格式如下所示:
     执行make,上图的输出结果如下:
     
      在上图中的变量值替换中a是var变量中每个变量的后缀,make解释器去var变量中搜索匹配每一个子变量,遇到后缀为a的子变量即将这个后缀a替换成b,变量值的替换这种语法只能替换变量的后缀。
     
     变量的模式替换,语法格式如下:
     模式替换可以替换任意形式的字符串,%作为模式字符串,可以匹配任意长度的字符串,变量var中查找匹配到的a替换为x,查找匹配到的b替换为y,而%模式字符串部分保持不变。
     
     规则中的模式替换,语法如下:
    具体示例如下:
     
     在上例中,make解释器从通过%.o在OBJS中匹配子目标,首先找到子目标func.o,这时$(OBJS):%.o部分变成了func.o,make再根据这个子目标生成依赖func.c。进而构成了整个规则,然后make继续搜索OBJS中的其它子目标,直到所有的子目标全部搜索完毕。
     在大型工程中,我们不可能去一条一条的写规则,那将繁琐无比,因此,一般通过模式规则这种写法来让make自动生成一条一条的规则,只是这种写法较为晦涩难懂。
     
     变量值的嵌套使用,语法如下:
     
    命令行变量使用,具体如下:
    执行make hm:=CMD,输出结果如下:
     
    使用override关键字可以防止makefile中定义的变量被命令行变量覆盖,override用法如下:
     
     将hm关键字用override修饰,再次执行make hm:=CMD,输出如下:
     
     命令行变量常用于某一个版本的可执行程序的生成,例如使用命令行变量将makefile中定义的变量覆盖,从而生成测试版本的程序。
     
     如果想定义一个多行变量,可以使用define关键字,用法如下:
     
     
    当定义的多行变量为命令时,例如上图中的@echo "run cmd ls ..."和@ls,这时这两条命令前面必须是以tab键开头的,否则报错。而foo变量是普通变量,不能以tab键开头,否则被认为是命令。
     
     
    参考如下:
        狄泰软件教程与课件
        GUN make手册
        专业嵌入式软件开发
     
     
     
     
     
     
     
     
     
     
     
     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    基于ARM的指纹采集仪的设计与实现
    基于单片机和CPLD的数字频率计的设计
    转来的
    单片机式语音播报伏特表
    汽车驾驶模拟器单片机系统设计
    基于AT89C51的智能矿井环境质量监控系统
    我的理解OpenAPI原理
    关联规则中的支持度与置信度
    LVS-NAT实现负载均衡
    在IIS上部署Analysis Services
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/8413829.html
Copyright © 2011-2022 走看看