Makefile变量

使用变量变量是在makefile中定义的名字,其用来代替一个文本字符串,这个文本字符串就是变量得值。这些值可以用来替代目标,依赖,命令以及makefile中其它部分。注意:变量名是大小写敏感的,而且变量分配时,变量值前面的空格被忽略。1. 变量的引用美元符号后跟用圆括号或大括号括住变量名则可引用变量的值,例如:$(foo)或${foo}。如果美元符号后面跟一个字符,例如:$x,则该字符将被处理为单字符的变量名,除了使用自动变量的情况,这种用法几乎不会使用。...
摘要由CSDN通过智能技术生成

使用变量

变量是在makefile中定义的名字,其用来代替一个文本字符串,这个文本字符串就是变量得值。这些值可以用来替代目标,依赖,命令以及makefile中其它部分。注意:变量名是大小写敏感的,而且变量分配时,变量值前面的空格被忽略。

1. 变量的引用

美元符号后跟用圆括号或大括号括住变量名则可引用变量的值,例如:$(foo)${foo}。如果美元符号后面跟一个字符,例如:$x,则该字符将被处理为单字符的变量名,除了使用自动变量的情况,这种用法几乎不会使用。

2. 变量赋值

变量名中也可以包含变量引用和函数调用,它们在该行读入时扩展。如果定义的是一个长变量,可以假如反斜杠增加可读性。根据定义方式和扩展方式的不同,变量赋值分两类。

2.1 递归调用扩展变量

如果它包含对其它变量的引用,这些引用在该变量替换时才被扩展,我们称为延时扩展。

  • 使用 ‘=’ 定义

  • 使用 '?='定义
    条件变量赋值,仅在变量没有定义的情况下有效。注意:一个变量即使是空值,它仍然已被定义,再使用 ?= 定义无效。

    FOO ?= bar
    #等同于
    ifeq ($(origin FOO), undefined)
    	FOO = bar
    endif
    
  • 使用 define 定义
    可用于定义多行变量,在define指令行以后endef行之前中间所有的行都是变量值的一部分。

    define two-lines
    echo foo
    echo $(bar)
    endef
    

    注意:如果定义中使用了多行命令时,在 Makefile 中书写在同一行中的多个命令属于一个完整的 shell 命令行,书写在独立行的一条命令是一个独立的 shell 命令行。

2.2 简单扩展变量

如果它引用其它变量和函数,在定义时立即展开。

  • 使用 ‘:=’ 定义

2.3 延时扩展和立即扩展的区别

举例如下,同样是定义变量时引用其它变量,递归调用扩展是在程序中引用该变量才扩展,而简单扩展是在定义时直接发生扩展。

val1 = aaa 
val2 = $(val1)
val3 := $(val1)

print1:
        @echo $(val2)
print2:
        @echo $
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值