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)能否获取所有的特殊变量

  • 相关阅读:
    Centos-706停用firewalld启用Iptables服务
    apache访问日志分析[转]
    apache日志管理【转】
    [转]如何使用PHP实现javascript的escape和unescape函数
    [转]linux下centos服务器安全设置
    [转]sysctl -P 报错解决办法
    [转]解决error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key错误
    [转]CentOS Apache 性能调试!
    [转]怎么查看和修改 MySQL 的最大连接数?
    [转]同一台Windows机器中启动多个Memcached服务
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265694.html
Copyright © 2011-2022 走看看