码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • make quick-example I: 变量语法 & 变量插值


    本章记录下make怎么使用变量 。

    makefile广泛用于各种类型的项目(包括kubernetes),还是要学习下,不然真的跟看天书一样

    两种赋值方式

    1. 递归扩展式

    递归式扩展的意思是,这种变量使用=或者define赋值,赋值运算符右边如果包含其他变量,这些变量也会被解析并进行插值。

    比如下面例子,输出为Huh?

    foo = $(bar)
    bar = $(ugh)
    ugh = Huh?
    
    all:;echo $(foo)
    

    解析链为:

    $(foo) => $(bar) = >$(ugh) => Huh?
    

    也就是说只要赋值运算符右边有其他变量,这些变量就会被解析,直到全部扩展为普通文本,这种赋值方式称为为递归式扩展(recursive expansion)。

    1. 简单扩展

    简单扩展使用的赋值符号是:=.

    简单扩展只能进行简单插值,如下所示:

    x := foo
    y := $(x) bar
    
    hello:
    	echo $(x)
    

    输出为:

    echo foo bar
    foo bar
    

    以下两个例子可以解释直接扩展的插值时机为赋值动作发生时,而不是输出时。

    • 例子A
    x := $(t) # x=''
    y := $(x) bar  # y=bar
    t := sfd
    
    hello:
    	echo $(y)
    
    • 例子B
    t := foo
    x := $(t)   # x=foo 
    y := $(x) bar # y= foo bar
    
    hello:
    	echo $(y) 
    

    那如果把例子A里的赋值符改成=,则会输出y=foo bar

    条件赋值

    条件赋值符(onditional variable assignment operator)为?=

    比如下面这个例子,取消第一行注释,输出为hello,不取消则输出为bar

    # FOO = hello
    FOO ?= bar # 如果未定义则赋值为bar
    
    hello:
    	echo $(FOO)
    

    条件赋值符相当于一种语法糖,复杂写法相当于:

    # FOO = hello
    ifeq ($(origin FOO), undefined)
      FOO = bar
    endif
    
    hello:
    	echo $(FOO)
    

    替换插值

    替换插值很好理解,就是字符串替换。

    foo := a.o b.o c.o
    bar := $(foo:.o=.c)
    hello:
    	echo $(bar)  # => a.c b.c c.c
    

    $(var: a=b)这种语法会将子串a替换为子串b.

  • 相关阅读:
    基于Java的Cplex入门
    USBCAN 、便携式 CAN 分析仪 、CAN卡
    计算机毕业设计node.js+Vue+Element企业员工信息管理系统
    AXI_Round_Robin_Arbiter 设计 - AW、W通道部分
    Arduino驱动LIS331HH三轴加速度传感器(惯性测量传感器篇)
    微信小程序API(详细 教程)
    使用Springboot时,Controller层有方法的参数是一个实体类,但是并不需要其中所有的参数
    07 创建型模式-单例模式
    公交实时位置查询APP
    基于Java+SpringBoot+Vue宠物领养系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
  • 原文地址:https://blog.csdn.net/qq_33745102/article/details/127101518
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号