何时在 Makefile 中使用空格或制表符?

2024-01-16

我正在创建一个使用条件 if 和 ifneq 的 makefile。 我注意到,如果我使用 if,下一行应该用空格缩进。

if [-d "$$d" ]; then
<space><space><space> echo "file found";
fi;

但如果我使用 ifneq 命令,则下一行必须用制表符缩进。

ifneq ($(strip $(USE_FILE)),NO)
<tab>echo "file not to be used"
endif

空格和制表符根本不重要。但是为什么在makefile中,空格和制表符有区别呢?


您必须了解 makefile 实际上是用两种完全不同的“语言”编写在一个文件中。

配方(运行编译器、echo 等的命令)是用 shell 脚本语法编写的。

makefile 的其余部分是not配方中是用 makefile 语法编写的。

为了让 make 能够区分配方和非配方的内容,它使用制表符。因此,以 TAB 开头的行被假定为配方的一部分(因此它们是 shell 脚本并传递到 shell 进行解析),以及不以 TAB 开头的行cannot是配方的一部分(因此它们不能是 shell 脚本:它们必须是 make 语法)。

在你的例子中,if [ -d ...是 shell 语法。如果它出现在 makefile 中,它必须是配方的一部分,因此前面必须有一个 TAB;如果 make 尝试将其解释为 makefile 语法,则会出现错误。ifneq是 makefile 语法:如果 shell 尝试将其解释为 shell 脚本,则会出现语法错误,因此它不能是配方的一部分,并且必须NOT前面有一个 TAB。

缩进的所有其他用途都是可选且无关的(例如,在上面的第一个示例中,您说“下一行应该用空格缩进”;这只是一个约定,无论您是否将其缩进,脚本都会以完全相同的方式工作全部)。

现在,有一些细节变得棘手:反斜杠转义的换行符、规则上下文等。但是如果您坚持所有配方行都用 TAB 缩进并且没有非配方行都用 TAB 缩进的规则,那么您'会没事的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时在 Makefile 中使用空格或制表符? 的相关文章

随机推荐

  • CSS:100% 表格的 内的中心文本区域

    现在 我有一个 100 宽度的表格 其中包含 2 列 其中有一个文本区域 用户可以在其中输入文本 table border collapse collapse width 100 border 1px solid black table l
  • 当依赖项被锁定时发现 Composer 软件包的最新版本

    假设我有一个composer json具有锁定依赖项的文件 require zendframework zendframework 2 4 2 require dev phpunit phpunit 4 6 6 我想这样做是因为我想手动更新
  • R - 将向上对角线转换为行

    我得到一个矩阵 数据框或数据表 我想创建一个矩阵 其中向上 反向对角线作为行 其余单元格作为 NA 我能够做到这一点 但我认为 应该有一个更容易 更简单的解决方案 因此 任何解决方案都值得赞赏 作为一个例子 假设我得到以下 data tab
  • Grails 服务类交叉引用

    我意识到 Grails 服务类是 Spring 管理的单例 我还知道 您可以通过像这样的驼峰式大小写形式使用 serviceClassName 声明本地定义来引用另一个服务类 令我惊讶的是 我似乎无法像这样交叉引用服务类 class Fir
  • jsTree:如何从jstree中获取所有叶节点?

    我想从 jsTree 获取所有叶节点 节点的 ID 和文本 我没有使用复选框 ui jsTree Root A A1 A1 1 A2 A2 1 B B2 C C1 C1 1 我想要 jsTree 的叶节点列表 预期输出 A1 1 A2 1
  • Google Drive API 如何支持下载请求的内容范围? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Google Drive API 如何支持获取内容范围请求 App Engine 获取请求大小有限制 请支持范围请求 以便可以读取大文件 您可以提供
  • __unicode__() 不返回字符串

    我在 python 中有以下课程 class myTest def init self str self str str def unicode self return self str 并在其他一些文件中实例化 myTest 来尝试 un
  • Excel 单元格中的 OpenXml 和日期格式

    我正在尝试使用 OpenXML 创建 xlsx 格式的 Excel 文件 因为我需要在 Web 服务器上使用它 我在表格中填写数值没有任何问题 但是我正在努力在单元格中设置经典的日期格式 下面使用快速测试DocumentFormat Ope
  • 类型错误:预期序列或类似数组,得到估计器

    我正在开发一个对产品有用户评论的项目 除了我手动提取的一些其他特征之外 我正在使用 TfidfVectorizer 从数据集中提取特征 df pd read csv reviews csv header 0 FEATURES feature
  • 根据屏幕尺寸缩放字体大小?

    我正在使用 AngularJS 1 x 和 Angular Material 开发一个 Web 应用程序 我正在尝试创建一个带有大标题的登陆页面md display 4 它看起来是这样的 正如您所看到的 标题很好地填充了页面并且适合一行 然
  • 如何在 iOS 地图上叠加一个圆圈

    我有一个半径和一个位置 这就是我试图获取圆的边界矩形的方法 MKMapRect boundingMapRect CLLocationCoordinate2D tmp MKCoordinateSpan radiusSpan MKCoordin
  • Laravel 5.4 - 如何对同一自定义验证规则使用多个错误消息

    为了重用代码 我在名为的文件中创建了自己的验证器规则验证服务提供者 class ValidatorServiceProvider extends ServiceProvider public function boot Validator
  • SPRING:在 Spring 中由工厂实例化创建的 bean 中使用自动装配

    您好 我无法在另一个使用工厂方法实例化的 bean 中自动装配我的 bean class A private String name getters and setters for name class B Autowired privat
  • Lightgbm 提前停止无法正常工作

    我正在使用 lightgbm 来执行机器学习任务 我想使用早期停止来找到给定多个超参数的最佳树数 然而 lgbm 停止种植树木 同时仍在改进我的评估指标 下面我附上了我的规格 params max bin 128 num leaves 8
  • 在 AWS SES 上实施把手助手,以便在 HTML 电子邮件程序中条件性地呈现标记

    我们正在创建一个 HTML 电子邮件模板 该模板需要根据 JSON 数据中的属性之一的值有条件地呈现标记 我们发现在以下示例中 您可以创建自定义 Handlebar Helpers 来完成此操作 但在使用这些助手时 AWS SES 拒绝发送
  • 将 MATLAB 文件转换为 Octave

    我有一系列为 MATLAB 编写的实验 但最近我们尝试通过 Octave 来运行它们 我意识到它们大多是兼容的 但我遇到了一些问题 而且我发现的在线常见问题解答或说明都没有解决这些问题 这有点复杂 因为有多个 m 文件相互作用 不过 现在我
  • 在 asp.net 中上传文件之前如何检查文件类型?

    我们如何在不使用文件扩展名的情况下检查文件类型 例如jpg等格式 上传它们使用 asp net 和 c 我正在使用 vs 2008 asp net c TELERIK 控件 RadUpload 想象一下有人将文本文件扩展名更改为 jpg 并
  • Haskell 中类型表达式的 Lambda?

    Haskell 或特定的编译器是否有类似类型级 lambda 的东西 如果这甚至是一个术语 详细说明一下 假设我有一个参数化类型Foo a b并想要Foo b成为 Functor 的一个实例 有没有什么机制可以让我做类似的事情 instan
  • 如何在安装了 goclipse 的 eclipse 中运行 GO 项目

    我已经在 eclipse 中安装了 goclipse 并创建了一个新的 go 项目 现在这就是我所拥有的 我的 hello go 看起来像这样 package main import fmt func main fmt Println He
  • 何时在 Makefile 中使用空格或制表符?

    我正在创建一个使用条件 if 和 ifneq 的 makefile 我注意到 如果我使用 if 下一行应该用空格缩进 if d d then