不喜欢广告? 无广告 今天

Makefile 格式化工具

开发人员文本
广告 移除?
用于检测应转换为制表符的前导空格缩进。
广告 移除?

指导

Makefile 格式化器

Makefile 格式化工具

粘贴您的 Makefile,格式化器将将其规范化为 GNU make 的严格制表符缩进配方规则。使用空格而非制表符的配方行(导致“缺少分隔符”错误的最常见原因,也是 AI 生成 Makefile 的常见问题)将被自动修复。尾随空白、过长的空白行以及不一致的赋值空格将在同一过程中被清理,并且每次更改都会显示,以便您在复制前审核。

如何使用

  1. 将您的 Makefile 粘贴到输入面板——或点击 尝试一个示例 加载一个带有故意问题的示例。
  2. 选择制表符宽度(用于检测应转换为制表符的缩进配方行)。
  3. 切换清理选项:将配方行中的空格转换为制表符、修剪尾随空白、规范化空白行运行、规范化赋值空格,并可选择对连续变量赋值进行对齐。
  4. 查看问题摘要和逐行修复列表,然后复制或下载格式化的 Makefile。

特征

  • 配方制表符修复 – 将使用空格缩进的配方行转换为制表符缩进(GNU make 唯一接受的缩进方式)。
  • 智能行分类 – 区分目标、变量赋值、条件语句(ifeq, else, endif),指令(include, vpath, export),以及配方行。
  • 赋值空格 – 规范化 =, :=, ::=, ?=, +=,并且 !=.
  • 可选列对齐 – 将连续的变量赋值对齐到同一操作符列,以提高可读性。
  • 问题报告 – 每个修复都会显示源行号,以便您验证更改。
  • 定义块安全 – 保留 defineendef 之间的内容原样不变。
  • 完全客户端 – 您的 Makefile 从未离开浏览器。

常问问题

  1. 为什么 GNU make 要求配方行使用制表符?

    Make 的解析器使用单个制表符字符作为前缀,以明确标识某行属于规则的配方部分。这一选择早于 1977 年 Make 的首次公开发布,并被确立,因为制表符是一种可靠的、位于行首的标记,不会与变量赋值或目标定义中的空白字符发生冲突。尽管这一规则已引起数十年的困惑,但更改该规则将无声地破坏数百万现有的 Makefile,因此 GNU make 仍保留制表符作为默认的 RECIPEPREFIX。

  2. Makefile 中 =、:=、::=、?=、+= 和 != 之间的区别是什么?

    递归赋值(=)会延迟展开,直到变量被使用时才进行展开,因此引用的变量在使用时被查找。简单赋值(:=)和 POSIX 简单赋值(::=)会立即展开右侧表达式,因此值在定义时即固定。条件赋值(?=)仅在变量当前未定义时设置,这在需要环境可覆盖的默认值时非常有用。追加赋值(+=)会向现有值追加,保留原始的递归或简单赋值特性。Shell 赋值(!=)会将右侧表达式作为 shell 命令执行,并存储结果输出,类似于 shell 中的反引号。

  3. 配方行与延续行之间的区别是什么?

    配方行是作为规则动作部分运行的缩进命令行;在标准 make 中,它必须以制表符开头。延续行是任何前一行以反斜杠结尾的行,逻辑上将这两行合并为一行。延续行继承其前一行的上下文,因此延续的配方仍然是配方,延续的变量赋值仍然是赋值。延续行的缩进仅为装饰性,不会影响 make 的解析。

  4. 为什么需要 .PHONY 目标,以及它们如何影响解析?

    .PHONY 声明告诉 make 所列名称不是真实文件而是操作标签,因此 make 会始终运行其配方,无论工作目录中是否存在同名文件。如果没有它,名为 clean 的文件会静默地禁用 make clean,因为 make 会认为该目标已更新。.PHONY 不改变配方解析或缩进规则——在 phony 目标下的配方行仍必须以制表符开头——但它改变了时间戳比较逻辑,使得每次调用时都将配方视为已过时。

想要享受无广告的体验吗? 立即无广告

安装我们的扩展

将 IO 工具添加到您最喜欢的浏览器,以便即时访问和更快地搜索

添加 Chrome 扩展程序 添加 边缘延伸 添加 Firefox 扩展 添加 Opera 扩展

记分板已到达!

记分板 是一种有趣的跟踪您游戏的方式,所有数据都存储在您的浏览器中。更多功能即将推出!

广告 移除?
广告 移除?
广告 移除?

新闻角 包含技术亮点

参与其中

帮助我们继续提供有价值的免费工具

给我买杯咖啡
广告 移除?