第4课 - 变量和不同的赋值形式

  • makefile 中反对程序设计语言中的变量的概念
  • makefile 中的变量只代表文本数据(字符串)
  • makefile 中的变量名规定

    • 变量名能够蕴含字符,数字,下划线
    • 不能蕴含“:” “#”, “=” 或 “ ”
    • 变量名大小写敏感

变量的定义和应用

makefile 中变量的赋值形式

  • 简略赋值(:=)
  • 递归赋值(=)
  • 条件赋值(?=)
  • 追加赋值(+=)

不同的赋值形式意义不同

简略赋值(:=)

  • 程序设计语言中的通用赋值形式
  • 只针对以后语句的变量无效
x := fooy := $(x)bx := new.PHONY : test test :     @echo "x => $(x)"    @echo "y => $(y)"   // 最终输入后果    // x => new// y => foob

递归赋值(=)

  • 赋值操作可能影响多个其它变量
  • 所有与指标变量相干的其它变量都受到影响
x = fooy = $(x)bx = new.PHONY : test test :     @echo "x => $(x)"    @echo "y => $(y)"   // 最终输入后果    // x => new// y => newb

条件赋值(?=)

  • 如果变量未定义,应用赋值符号中的值定义变量
  • 如果变量曾经定义,赋值有效
x := fooy := $(x)bx ?= new.PHONY : test test :     @echo "x => $(x)"    @echo "y => $(y)"   // 最终输入后果    // x => new// y => foob

追加赋值(+=)

  • 原变量值之后加上一个新值
  • 原变量值与新值之间有空格隔开
x := fooy := $(x)bx += $(y).PHONY : test test :     @echo "x => $(x)"    @echo "y => $(y)"   // 最终输入后果    // x => foob foob// y => foob

小结

  • makefile 中反对变量的定义和应用
  • makefile 中存在四种变量的赋值形式

    • 简略赋值 (:=)
    • 递归赋值 ( =)
    • 条件赋值 ( ?=)
    • 追加赋值 (+=)