makefile 赋值

在Makefile中,赋值操作是构建脚本中非常重要的一部分,它允许你定义变量来存储文件名、编译选项、目录路径等,以便在Makefile的其他部分重用这些信息。Makefile支持几种不同的赋值方式,每种方式在变量作用域和何时扩展(evaluate)其值方面有所不同。以下是几种主要的赋值方式:

  1. 简单赋值(递归赋值)

    使用单个等号 = 进行赋值。这种方式是“递归”的,意味着变量的值在每次被引用时都会被重新计算。如果变量的值依赖于其他变量,而这些变量的值在后续可能被修改,那么使用这种方式是很合适的。

    VAR = value
    another_var = $(VAR)_suffix
    

    如果后续VAR的值改变了,another_var的值也会基于新的VAR值重新计算。

  2. 静态赋值(直接赋值)

    使用:=进行赋值。这种方式是“直接”的或“静态”的,意味着变量的值在赋值时就被确定下来,后续对依赖变量的修改不会影响到这个变量的值。

    VAR := value
    another_var := $(VAR)_suffix
    

    即使后续VAR的值改变了,another_var的值也不会改变,因为它在赋值时就已经确定了。

  3. 条件赋值

    使用?=进行赋值。这种方式只会在变量未被定义时才进行赋值。

    VAR ?= value
    

    如果VAR之前没有被定义,那么VAR将被赋予value。如果VAR已经被定义,那么这条赋值语句将不会改变VAR的值。

  4. 追加赋值

    使用+=进行赋值。这种方式用于向已存在的变量值后面追加内容。

    VAR = value
    VAR += more
    

    VAR的最终值将是value more

  5. 覆盖赋值

    虽然Makefile本身没有直接的“覆盖赋值”语法,但你可以通过再次使用简单赋值或静态赋值的方式来“覆盖”一个变量的值。这实际上是变量作用域的一种表现,因为Makefile的变量作用域是全局的,后面的赋值会覆盖前面的赋值。

选择哪种赋值方式取决于你的具体需求,比如变量的值是否需要依赖于其他变量的后续修改,或者你是否希望变量在Makefile的不同部分具有不同的值等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值