• 第5课


    第5课 - 预定义变量的使用

    1. makefile中的预定义变量

      (1)自动变量

      •  $@  @^  @<    

      (2)特殊变量

      • $(MAKE) , $(MAKECMDGOALS) , $(MAKEFILE_LIST) 
      • $(MAKE_VERSION) , $(CURDIR) , $(.VARIABLES) 
      • ......

    2. 自动变量的使用

      (1)自动变量的意义

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

          $^  当前规则中所有的依赖

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

      (2)自动变量的使用示例

        

             执行 make all 后程序的输出

         $@ => all

         $^ => first second third

         $< => first

      注意

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

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

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

     1 # 演示自动变量的使用
     2 
     3 CC := gcc
     4 TARGET := hello.out
     5 
     6 $(TARGET) : main.o func.o
     7     $(CC) -o $@ $^
     8 
     9 main.o : main.c
    10     $(CC) -o  $@ -c $<
    11 
    12 func.o : func.c
    13     $(CC) -o $@ -c $<
    14     
    15 .PHONY : rebuild all clean
    16 
    17 rebuild : clean all
    18 
    19 all : $(TARGET)
    20 
    21 clean : 
    22     rm *o $(TARGETa)

    3. 特殊变量的使用 

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

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

      (3)$(MAKEFILE_LIST)

      • make所需要处理的 makefile 文件列表
      • 当前 makefile 的文件名总是位于列表的最后
      • 文件名之间以空格进行分隔
     1 # 测试以上三个特殊变量的含义
     2 
     3 .PHONY : all out first second third test
     4 
     5 all out : 
     6     @echo "$(MAKE)"
     7     @echo "$(MAKECMDGOALS)"
     8     @echo "$(MAKEFILE_LIST)"
     9     
    10 first :
    11     @echo "first"
    12     
    13 second :
    14     @echo "second"
    15     
    16 third :
    17     @echo "third"
    18     
    19 test :
    20     @$(MAKE) first
    21     @$(MAKE) second
    22     @$(MAKE) third

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

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

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

     1 # 测试以上三个特殊变量的含义
     2 
     3 .PHONY : test1 test2
     4 
     5 TDelphi := Delphi Tang
     6 D.T.Software := D.T.
     7     
     8 test1 :
     9     @echo "$(MAKE_VERSION)"
    10     @echo "$(CURDIR)"
    11     @echo "$(.VARIABLES)"
    12     
    13 test2 :
    14     @echo "$(RM)"

    注:本文整理于《狄泰12月提升计划》课程内容

    狄泰QQ群:199546072

  • 相关阅读:
    【Linux开发】Linux下jpeglib库的安装详解
    【Linux开发】Linux下jpeglib库的安装详解
    【Linux开发】jpeglib使用指南
    【Linux开发】jpeglib使用指南
    【Linux开发】为qt-embedded添加jpeg库的交叉编译方法for arm
    【Linux开发】为qt-embedded添加jpeg库的交叉编译方法for arm
    Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法
    Log4j 日志记录
    如何根据Ip获取地址信息--Java----待整理完善!!!
    Struts如何获取客户端ip地址
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/6776437.html
Copyright © 2020-2023  润新知