news 2026/9/2 10:51:40

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/9/2 11:27:18

BISHI35 【模板】巴什博弈

求解代码public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in new StreamTokenizer(br);PrintWriter out new PrintWriter(new OutputStreamWriter(System.out));in.n…

作者头像 李华
网站建设 2026/8/24 13:35:48

大数据存储方案:社交网络图数据库选型指南

大数据存储方案:社交网络图数据库选型指南 关键词:社交网络、图数据库、大数据存储、选型指南、属性图模型 摘要:社交网络的核心是"关系"——用户与用户的关注、好友、互动,内容与内容的关联,行为与兴趣的映射。传统数据库(如关系型数据库、NoSQL)在处理这些复…

作者头像 李华
网站建设 2026/9/2 22:56:09

Code vs Serialized AST Inputs for LLM-Based CodeSummarization: An Empirical Study

文档核心要点提炼1. 研究背景与问题​代码摘要(将源码生成自然语言描述)对程序理解、软件维护至关重要。传统编码器-解码器模型中,抽象语法树(AST)因能编码代码结构,显著提升摘要质量;但大语言模…

作者头像 李华
网站建设 2026/9/3 0:01:03

【YOLOv8多模态涨点改进】独家创新首发 | TGRS 2025 | 引入CDFIM跨模态差异特征交互模块,通过差异特征提取和融合增强机制,减少了冗余信息,显著提升了小目标的检测精度,高效涨点改进

一、本文介绍 🔥本文给大家介绍使用 CDFIM跨模态差异特征交互模块改进 YOLOv8 多模态目标检测,通过有效的差异特征提取和增强,显著提升了小目标的检测精度,特别是在复杂背景和低对比度环境下。该模块通过残差加法和通道与空间注意力机制,增强了可见光与红外模态之间的互…

作者头像 李华