news 2026/6/10 0:27:30

makefile中的shell变量语法总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
makefile中的shell变量语法总结

在 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)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 6:32:56

【毕业设计】基于springboot的工厂精密设备销售管理系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/9 21:04:11

Ruby 文件的输入与输出

Ruby 文件的输入与输出 引言 在软件开发过程中,文件操作是必不可少的一环。对于Ruby开发者来说,掌握如何进行文件的输入与输出操作,是提高编程效率的关键。本文将详细介绍Ruby中文件输入与输出的相关知识,包括文件读写的基本操作、常用方法以及注意事项。 文件操作概述 …

作者头像 李华
网站建设 2026/6/6 12:15:58

当 OpenClaw 内置 LanceDB:为个人 AI 智能体打造超强长期记忆

本文将为你剖析 OpenClaw 的 LanceDB memory plugin 的实现。OpenClaw的核心定位是让 AI 成为能实际操作用户设备、拥有持久化记忆并能主动发起任务的“数字助手”,而不只是一个聊天机器人。 OpenClaw (原名 Clawdbot/Moltbot)是当下超级火爆…

作者头像 李华
网站建设 2026/6/9 18:42:00

2026最新React教程(四)React组件属性——Props的使用

前言 Props是实现React组件间数据传递的核心机制,也是组件实现动态化、复用性的关键。通过Props,父组件可向子组件传递任意类型的数据,让相同结构的组件能渲染不同内容。本文将系统讲解Props的使用规则、只读特性、默认值设置及类型校验&…

作者头像 李华
网站建设 2026/6/9 18:38:01

效率翻倍:One API多机部署实现AI服务高可用

效率翻倍:One API多机部署实现AI服务高可用 在企业级AI应用落地过程中,单点服务瓶颈是绕不开的现实问题。当业务流量激增、模型调用并发上升、或某家大模型服务商出现临时波动时,一个孤立的API网关往往成为整个智能系统的脆弱环节。你是否遇…

作者头像 李华