何时在 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 中使用空格或制表符? 的相关文章

  • Android.mk 与 Application.mk

    我对 Android mk 和 Application mk 的使用有点模糊 我尝试阅读 APPLICATION MK HTML ANDROID MK HTML 在NDK 附带的文档 http developer android com s
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 如何链接 ndk 应用程序中的任何库

    From 本教程 http marakana com forums android examples 49 html 看到我有一个预构建的静态库 名为stackoverflow a它有stackoverflow h 现在我想使用该静态库的功
  • bash:PWD 和 CURDIR 有什么区别?

    我的问题 我使用 Makefile 来运行docker runtarget 需要当前工作目录作为其参数之一 我使用任一 PWD or CURDIR build Dockerfile docker run lt PWD or CURDIR g
  • 强制 Makefile 中依赖项的顺序

    我有一个 Makefile 我想并行使用它来编译一组单独的程序 它看起来像这样 compileall program1 program2 program3 echo Compilation completed program1 progra
  • 如果覆盖率低于一定百分比,则单元测试失败

    我制作了一个执行的 makefilego test cover 是否有可能失败make unit tests如果覆盖范围低于 X 则命令 我该怎么做呢 您可以使用TestMain在你的测试中做到这一点 TestMain 可以充当测试的自定义
  • 在 Unix 中,我可以在目录中运行“make”而无需先 cd 到该目录吗?

    在 Unix 中 我可以运行make在没有的目录中cd首先进入该目录 make C path to dir
  • 构建 gradle 系统应用程序作为 AOSP 构建的一部分

    我有一个基于 AOSP 的自定义 ROM 并且正在开发一个系统应用程序 该应用程序在 ROM 构建期间打包 就像任何其他系统应用程序一样 是否可以将此应用程序切换为 gradle 样式应用程序 并在 AOSP 构建期间使用 gradle 构
  • bash 函数保留制表符补全

    我把函数 make color make 1 ccze A in bashrc获得彩色的 make 输出 他的作品很好 但是make用于选择目标的制表符补全功能丢失 有什么方法可以保留函数中命令的制表符完成 或者我可以做其他事情来实现制表符
  • 如何不在输出中打印 makefile 中的注释

    我有一个像这样的 makefile install somecommand some explanation for next command lastcommand 发生的事情是评论 some explanation for next c
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 什么是“制定目标”?

    为什么我需要制作一个make target在能够构建我的源代码之前 更具体地说 什么是制定目标 http publib boulder ibm com infocenter rsdvhelp v6r0m1 index jsp topic o
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再
  • 将环境变量从 Makefile 导出到用户态环境

    我正在研究如何从 Makefile 环境变量导出以在用户环境中公开 因此应该可以从用户 shell 访问从 Makefile 导出这些变量 我努力了make s export https www gnu org software make
  • Makefile:对子目录中的所有文件进行操作?

    我正在使用 Makefile 和 GNU make 基于源 Markdown 文件创建各种文档输出目标 这包括使用latex or pdflatex创建 DVI 文件 使用 EPS 或 PS 格式以外的图像会导致错误 我可以在源 Markd
  • 如何制作一个makefile只用于编译一些java文件?

    我有三个java文件 名为A java B java C java A将创建对象B B将创建对象C 但我以前从未构建过makefile 有谁可以帮我构建一个 makefile 来编译这三个 java 文件吗 我应该使用什么工具来制作 mak
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 具有两个同名目标的 Makefile

    我有一个包含包含语句的 makefile 我无法控制包含的 makefile 的内容 不过 我希望能够在 某些 不是全部 目标之前添加一些预处理步骤 考虑以下示例 install echo install target include ot
  • 在 Mac 上更新 Make 版本

    我正在尝试更新 mac 上的 make 版本 但遇到了问题 最小项目依赖项是 4 1 但我的版本似乎是 3 81 我已将 Xcode 更新到最新版本并安装了命令行工具 但它似乎仍然是旧版本 有谁遇到过这个问题或知道解决方法吗 这是我所做的
  • 在赋值时计算 Makefile 变量

    在 Makefile 中 我尝试将 shell 命令的结果分配给变量 TMP mktemp d tmp XXXXX all echo TMP echo TMP but make Makefile all 正在回显 2 个不同的值 例如 tm

随机推荐

  • 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