zoukankan      html  css  js  c++  java
  • 第5课

    1. makefile中的预定义变量

    (1)自动变量

    •  $@, @^,  @<    

    (2)特殊变量

    • $(MAKE),  $(MAKECMDGOALS) ,  $(MAKEFILE_LIST) 

    • $(MAKEVERSION),  $(MAKEVERSION),  $(CURDIR) ,  $(.VARIABLES) 

    • ......

     

    2. 自动变量的使用

    (1)自动变量的意义

          $@   当前规则中触发命令被执行的目标

          $^  当前规则所有的依赖

          $<  当前规则中的第一个依赖

    (2)自动变量使用示例

    .PHONY : all first second third 
    
    all : first second third
        @echo "$$@ => $@"
        @echo "$$^ => $^"
        @echo "$$< => $<"
        
    firtst:
    second:
    third:

    执行 make all 后程序的输出:

    $@ => all

    $^ => first second third

    $< => first

     

    注意:

    ⅰ. 在执行makefile脚本时,make首先展开脚本中的变量等,相当于C中预处理过程然后再将相应规则中的命令交给shell执行

    ⅱ. "$对于makefile有特殊含义输出时需要加上一个 "$" 进行转义

    ⅲ. "$@对于Bash Shell 有特殊含义输出时需要加上 "" 进行转义 $@是shell输入的参数的个数

    编程实验:

    # 演示自动变量的使用
    
    
    CC := g++
    TARGET := hello-world.out
    
    $(TARGET) : func.o main.o
        $(CC) -o $@ $^
    
    func.o : func.c
        $(CC) -o $@ -c $^
    
    main.o : main.c
        $(CC) -o $@ -c $^
    
    .PHONY : rebuild clean all
    
    rebuild : clean all
    
    
    all : $(TARGET)
    
    clean :
        $(RM) *.o $(TARGET)

    运行结果:

      

    3. 特殊变量的使用 

    (1)$(MAKE),当前make解释器的文件名

    (2)$(MAKECMDGOALS),命令行中指定的目标名(make的命令行参数 make xx , xx 即MAKECMDGOALS)

    (3)$(MAKEFILE_LIST)

      • make所需要处理的 makefile 文件列表

      • 当前 makefile文件名总是位于列表的最后

      • 文件名之间以空格进行分隔

    编程实验:

    # 测试以上三个特殊变量的含义
    
    
    .PHONY : all out first second third test
    
    all out : 
        @echo "$(MAKE)"
        @echo "$(MAKECMDGOALS)"
        @echo "$(MAKEFILE_LIST)"
        
        
    first :
        @echo "first"
        
    second :
        @echo "second"
        
    third :
        @echo "third"
        
    test :
        @$(MAKE) first
        @$(MAKE) second
        @$(MAKE) third

    运行结果:

      

    (4)$(MAKE_VERSION),当前make解释器的版本

    (5)$(CURDIR),当前make解释器的工作目录

    (6)$(.VARIABLES),所有已经定义的变量名列表自定义变量 + 预定义变量自动变量、特殊变量))

     编程实验:

     # 测试以上三个特殊变量的含义
    
    
    .PHONY : test1 test2
    
    TDelphi := Delphi Tang
    D.T.Software := D.T.
    	
    test1 :
    	@echo "$(MAKE_VERSION)"
    	@echo "$(CURDIR)"
    	@echo "$(.VARIABLES)"
    	
    test2 :
    	@echo "$(RM)"
    

     运行结果:

       

    4. 小结

    (1)makefile提供了预定义变量自动变量供开发者使用

    (2)预定义变量的使用能否使得makefile的开发更高效

    (3)自动变量是makefile中最常见的元素

    (4)使用$(.VARIABLES)能否获取所有的特殊变量

  • 相关阅读:
    阿里云服务器搭建之绑定多个域名
    centos7下yum安装mysql
    Mac 升级之后 无法通过域名 SSH 连接
    【课程章节更新】突破 没有支付权限的小程序 完成支付闭环
    每次sudo su切换root用户,都要source /etc/profile
    那些让你震惊的网站
    bootstrap select2使用模态框,搜索框无法输入问题解决
    新浪图片停止外链后的一些解决办法
    Yii2 报错 Headers already sent in
    使用Python Flask 开发微信机器人
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265694.html
Copyright © 2011-2022 走看看