news 2026/5/9 23:59:50

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/5/4 17:29:35

《GraphQL 强类型架构下的错误处理体系设计指南》

构建GraphQL错误处理规范的首要核心,是完成异常域的全链路精细化拆解与语义化专属归类,彻底摒弃传统扁平化、无层级的错误分类模式,基于GraphQL请求从入口到输出的完整执行链路,划分出具备独立特征、独立触发条件、独立反馈逻辑的…

作者头像 李华
网站建设 2026/5/9 13:49:39

【MIMO通信】超越对角线RIS MIMO容量最大化Matlab复现

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

作者头像 李华
网站建设 2026/4/26 11:17:57

Java计算机毕设之基于springboot的工厂精密设备销售管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/4/27 17:24:16

人工智能需要学习哪些课程?

一、数学基础:AI 的底层支撑(嵌入式开发者可针对性突破)无需深度学习纯数学理论,重点掌握与 AI 算法直接相关的核心知识点,推荐课程兼顾 “易懂性 实用性”:✅ 线性代数(必备)核心内…

作者头像 李华
网站建设 2026/5/3 19:18:47

请举例 AST 的更多真实例子

请举例 AST 的更多真实例子下面给你几个更真实、更接近解析器输出的 AST 例子(我会用“代码片段 → AST(树形/括号式)→ 可能的序列化”来展示)。为了可读性,我会给 精简但结构真实 的 AST(类似 Tree-sitte…

作者头像 李华