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

 更新时间:2026年02月11日 09:33:55   作者:serve the people  
在 Makefile 中,变量的使用规则确实容易让人混淆,下面我来总结一下常见的几种用法及其含义,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

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

1.$(var)或${var}

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

2.$$var

  • 用途:在 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 尝试解析它。

3.@符号

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

4.组合使用示例

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}ShellShell 中引用变量并支持默认值
$$varShellShell 中引用变量(避免与 Makefile 冲突)
@commandMakefile抑制命令回显

实际场景建议

  • 如果你在 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变量语法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论