makefile中的shell变量语法及用法总结

作者:

文章目录
  • 用途:引用 Makefile 中定义的变量。 示例: PORT = 8000 start: echo “Port is $(PORT)” 说明: $(PORT) 是 Makefile 的标准语法,用于获取变量 PORT 的值。 ${PORT} 功能相同,只是另一种写法。
  • 用途:在 shell 命令中引用 shell 变量(避免与 Makefile 变量冲突)。 示例: start-by-uvicorn: @PORT_VAL=$${port:-9608}; echo “Using port: $$PORT_VAL” 说明: $${port:-9608} 是 shell 的语法,表示如果 port 未定义,则使用默认值 9608。 $$PORT_VAL 是为了告诉 Makefile:“这不是 Makefile 变量,而是 shell 变量”,防止 Makefile 尝试解析它。
  • 用途:抑制命令本身的回显(即不让命令本身显示在终端中)。 示例: start: @echo “Starting application…” 说明: 默认情况下,Makefile 会先打印执行的命令,再执行命令。 加上 [@](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/utils/logger.py#L0-L67) 后,只会执行命令,不会打印命令本身。
  • PORT = 8000 start-by-uvicorn: @PORT_VAL=$${port:-$(PORT)}; echo “Using port: $$PORT_VAL” 解释: $(PORT):引用 Makefile 中定义的 PORT 变量(值为 8000)。 $${port:-$(PORT)}:shell 语法,若 [port](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/config/settings.py#L60-L60) 未定义,则使用 $(PORT) 的值。 $$PORT_VAL:引用 shell 变量 PORT_VAL,避免被 Makefile 解析。
  • 语法 类型 用途 $(var) Makefile 引用 Makefile 中定义的变量 $${var} Shell Shell 中引用变量并支持默认值 $$var Shell Shell 中引用变量(避免与 Makefile 冲突) @command Makefile 抑制命令回显
  • 如果你在 Makefile 规则内部 需要引用 Makefile 变量,使用 $(var)。 如果你需要在 shell 命令中操作变量,使用 $$var 和 $${var}。 如果你不希望命令本身显示在终端中,加上 [@](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/utils/logger.py#L0-L67)。 到此这篇关于makefile中的shell变量语法总结的文章就介绍到这了,更多相关makefile shell变量语法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: shell 通过makefile传参给c语言的实现示例 shell脚本编程Makefile的使用 Linux makefile 和shell文件相互调用实例详解 Linux Makefile与Shell的问题 Shell脚本变量的只读 删除 类型及注释语法基础 Linux上读取或设置环境和shell变量的教程 shell脚本declare命令的用法详解(声明变量的属性和类型) Shell全局变量、局部变量与特殊变量的具体使用 shell判断变量是否含某个字符串的6种方法
  • 目录
    • 1.$(var)或${var}
    • 2.$$var
    • 3.@符号
    • 4.组合使用示例
    • 总结对比表
    • 实际场景建议

    在 Makefile 中,变量的使用规则确实容易让人混淆,下面我来总结一下常见的几种用法及其含义:

    • 用途:引用 Makefile 中定义的变量。
    • 示例
    PORT = 8000
    start:
        echo "Port is $(PORT)"
    • 说明
      • $(PORT) 是 Makefile 的标准语法,用于获取变量 PORT 的值。
      • ${PORT} 功能相同,只是另一种写法。

    • 用途:在 shell 命令中引用 shell 变量(避免与 Makefile 变量冲突)。
    • 示例
    start-by-uvicorn:
        @PORT_VAL=$${port:-9608}; 
        echo "Using port: $$PORT_VAL"
    • 说明
      • $${port:-9608} 是 shell 的语法,表示如果 port 未定义,则使用默认值 9608
      • $$PORT_VAL 是为了告诉 Makefile:“这不是 Makefile 变量,而是 shell 变量”,防止 Makefile 尝试解析它。

    • 用途:抑制命令本身的回显(即不让命令本身显示在终端中)。
    • 示例
    start:
        @echo "Starting application..."
    • 说明
      • 默认情况下,Makefile 会先打印执行的命令,再执行命令。
      • 加上 [@](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/utils/logger.py#L0-L67) 后,只会执行命令,不会打印命令本身。

    PORT = 8000
    start-by-uvicorn:
        @PORT_VAL=$${port:-$(PORT)}; 
        echo "Using port: $$PORT_VAL"
    • 解释
      • $(PORT):引用 Makefile 中定义的 PORT 变量(值为 8000)。
      • $${port:-$(PORT)}:shell 语法,若 [port](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/config/settings.py#L60-L60) 未定义,则使用 $(PORT) 的值。
      • $$PORT_VAL:引用 shell 变量 PORT_VAL,避免被 Makefile 解析。

    语法 类型 用途
    $(var) Makefile 引用 Makefile 中定义的变量
    $${var} Shell Shell 中引用变量并支持默认值
    $$var Shell Shell 中引用变量(避免与 Makefile 冲突)
    @command Makefile 抑制命令回显

    • 如果你在 Makefile 规则内部 需要引用 Makefile 变量,使用 $(var)
    • 如果你需要在 shell 命令中操作变量,使用 $$var$${var}
    • 如果你不希望命令本身显示在终端中,加上 [@](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/utils/logger.py#L0-L67)。

    到此这篇关于makefile中的shell变量语法总结的文章就介绍到这了,更多相关makefile shell变量语法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • shell 通过makefile传参给c语言的实现示例
    • shell脚本编程Makefile的使用
    • Linux makefile 和shell文件相互调用实例详解
    • Linux Makefile与Shell的问题
    • Shell脚本变量的只读 删除 类型及注释语法基础
    • Linux上读取或设置环境和shell变量的教程
    • shell脚本declare命令的用法详解(声明变量的属性和类型)
    • Shell全局变量、局部变量与特殊变量的具体使用
    • shell判断变量是否含某个字符串的6种方法

    站内搜索