4.变量和不同的赋值方式

  • 变量介绍

    • makefile 中支持程序设计语言中变量的概念
    • makefile 中的变量只代表文本数据(即只有一种类型:字符串)
    • makefile 中的变量名规则
      • 变量名可以包含字符,数字,下划线
      • 不能包含 ":""#""="" "
      • 变量名大小写敏感
  • 变量的定义和使用

    ##变量定义
    CC := gcc
    TARGET := hello.out
    ##变量使用
    $(TARGET) : func.o main.o
    	$(CC) -o $(TARGET) func.o main.o
    
  • makefile 中变量的赋值方式

    • 简单赋值(:=

      • 程序设计语言在通用的赋值方式
      • 只针对当前语句的变量有效
      x := foo
      y := $(x)b
      x := new
      
      .PHONY : test
      test :
              @echo "x => $(x)"
              @echo "y => $(y)"
      
      ##执行结果
      x => new
      y => foob
      
    • 递归赋值(=

      • 赋值操作可能影响多个其他变量
      • 所有与目标变量相关的其它变量都将受到影响
      #code1
      x = foo
      y = $(x)b
      x = new
      .PHONY : test
      test :
              @echo "x => $(x)"
              @echo "y => $(y)"
      #执行结果
      x => new
      y => newb
      
      
      #code2
      a = $(b) #b还没有被定义,所以a的值为空
      b = $(c) #c还没有被定义,所以b的值为空
      c = hello-makefile
      .PHONY : test
      test :
              @echo "a => $(a)"
              @echo "b => $(b)"
              @echo "c => $(c)"
      ##执行结果
      a => hello-makefile
      b => hello-makefile
      c => hello-makefile
      
    • 条件赋值(?=

      • 如果变量未定义,使用赋值符号中的值定义变量
      • 如果变量已经定义,赋值无效
      x := foo
      y := $(x)b
      x ?= new
      .PHONY : test
      
      test :
              @echo "x => $(x)"
              @echo "y => $(y)"
      
      ##执行结果
      x => foo
      y => foob
      
    • 追加赋值(+=

      • 原变量值之后加上一个新值(相当于字符串的追加)
      • 原变量值与新值之间由空格隔开
      x := foo
      y := $(x)b
      x += $(y)
      
      .PHONY : test
      
      test :
              @echo "x => $(x)"
              @echo "y => $(y)"
      
      ##执行结果
      x => foo foob
      y => foob
      
原文地址:https://www.cnblogs.com/bky-hbq/p/13197761.html