news 2026/11/6 0:40:14

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/11/2 8:05:43

【课程设计/毕业设计】基于springboot的工厂精密设备销售管理系统的设计与实现【附源码、数据库、万字文档】

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

作者头像 李华
网站建设 2026/11/2 8:05:46

AI应用架构师谈企业AI技术栈选型的重要性

AI应用架构师谈企业AI技术栈选型的重要性:从踩坑到落地的全维度思考 引言:那些死在“选型”上的AI项目 三年前,我曾参与过一个传统制造企业的设备故障预测项目:企业投入了500万预算,团队用TensorFlow训练了一个精度达92%的LSTM模型,但上线后却频繁崩溃——原因很简单:…

作者头像 李华
网站建设 2026/11/4 22:04:58

Java计算机毕设之基于Spring Boot与微信小程序的助农农产品销售平台基于springboot的助农农产品销售平台小程序(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/11/3 21:29:08

计算机类专业就业方向和就业前景

计算机类专业就业方向和就业前景 每年高考的热门专业,计算机类专业都是好多家长和孩子心目中理想的专业。随着物联网和5G时代的到来,计算机类专业越来越火。 计算机类专业包括哪些专业?各专业设就业前景如何?毕业后能做哪些工作…

作者头像 李华