【问题标题】:What is the reasoning behind the Makefile whitespace syntax?Makefile 空白语法背后的原因是什么?
【发布时间】:2009-11-18 12:04:50
【问题描述】:

在 Michael Sparks 在伦敦的 SO DevDay 上对 Peter Norvig 的 Python 拼写检查器进行了出色的演练之后,我正在重新审视 Python。

他强调的一点是 Python 看起来多么干净。没有使用大括号来表示范围,而是使用空格来指示块范围。

这让我开始思考。我想知道这是否是构建 make 目标所需的命令前面的 TAB 缩进背后的原因。

清晰度方面是否相同?轻松区分目标和构建目标所需的命令?

【问题讨论】:

标签: syntax makefile


【解决方案1】:

来自“Unix 编程的艺术”的这句话:

为什么是第 1 列中的选项卡? Yacc 是新的,Lex 是全新的。我也没有尝试过,所以我认为这是一个很好的学习借口。在对 Lex 的第一次尝试让自己咆哮起来之后,我只是用模式换行符做了一些简单的事情。它奏效了,它留了下来。几周后,我的用户群大约有十几个,其中大多数是朋友,我不想搞砸我的嵌入式基础。遗憾的是,剩下的就是历史了。
——斯图尔特·费尔德曼

【讨论】:

    【解决方案2】:

    我认为 Makefile 犯了一个错误,即坚持使用一个制表符进行缩进。允许空间有什么害处?不会损失精度,因为 shell 命令无论如何都不能以空格开头,而且目标行和命令行之间没有混淆。

    【讨论】:

    • @Ned,是的,同意你的看法。我想通过使它成为“你应该标签!”我们不必担心像 Pythonic 这样的讨论! (-:
    • @Ned,我认为 makefile 接受多个空格并且不限于一个且只有一个 TAB 字符。
    • Makefile 要求配方行以 TAB 开头。在 TAB 之后,您可以拥有任意数量的其他 TAB 或空格。使用任何空格,而不仅仅是 TAB,都会破坏数千个 makefile,因为许多 makefile 使用空格缩进变量赋值或其他非命令行。仅供参考,较新版本的 GNU make 定义了一个变量 .RECIPEPREFIX,您可以使用该变量将配方行介绍字符从默认(TAB)更改为其他单个字符。这会降低您的 makefile 的可移植性,但可能更具可读性。
    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 2018-08-31
    • 2020-01-26
    • 2016-03-31
    • 2021-11-01
    • 2010-10-03
    • 2018-02-28
    • 2018-04-11
    相关资源
    最近更新 更多