执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果

2024-04-03

From Bash 初学者指南表 7-1 https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html,我们可以说[ FILE1 -ot FILE2 ]将产生True if FILE1FILE2, or if FILE2存在并且FILE1才不是。在 shell 上执行此命令返回True if FILE1缺席并且FILE2存在。但是,当我在 make 脚本中使用它时,它产生了False每当FILE1缺席并且FILE2在场。准确地说,我在 make 和 shell 脚本中使用了以下命令:

[ FILE1 -ot FILE2 ] && echo 1 || echo 0

在 shell 上运行此命令会在预期时返回 1。但是,仅当以下情况时,通过 make 运行此命令才会导致 1FILE1存在并且被发现比FILE2。在其他情况下,即每当FILE1没有发现比FILE2或者每当FILE1缺席并且FILE2存在,上面的命令在我的 make 脚本中产生 0。请注意,在我的 make 脚本中,我将上述命令的结果存储在全局变量中。此全局变量稍后将通过条件在其中一个配方中使用。

所以,我想知道这是否是 make 中的错误/功能,还是我这边可能出现的问题(由于某些拼写错误或其他可能的错误来源)?

注意:我在 Ubuntu 18.04.3 上使用 GNU Make 4.1


尝试这个实验(在脚本中):

在我测试的情况下:当 file1 不存在且 file2 确实存在时:

#!/bin/sh

[ file1 -ot file2 ] && echo "file1 older" || echo "file2 older"

产生 file2 旧版本

#!/bin/bash

[ file1 -ot file2 ] && echo "file1 older" || echo "file2 older"

产生 file1 较旧

默认情况下 make 将使用 #!/bin/sh 作为 shell,您可以通过以下方式更改:SHELL = /bin/bash在你的 makefile 中

我不知道为什么这是不同的 - 它只是 sh 和 bash 之间的不同实现......

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

执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果 的相关文章

  • 具有两个同名目标的 Makefile

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

    有没有办法让 GNU make 打印导致命令失败时执行的目标的 回溯 我经常处理严重混淆的 makefile 同时解决在新系统上构建软件的可移植性问题 这对于 make 来说似乎是一件非常简单的事情 这将极大地帮助调试 但我找不到任何方法来
  • 使用 .INTERMEDIATE 在 makefile 中进行不可靠的并行构建?

    我有一个可以生成多个输出文件的工具 众所周知 在 make 中很难建模 我正在使用食谱GNU Makefile 规则从单个源文件生成一些目标 https stackoverflow com questions 2973445 gnu mak
  • 如何在 Makefile 中获取 make 命令的 pid?

    我想使用此构建特有的临时目录 如何在 Makefile 中获取 make 命令的 pid I tried TEMPDIR tmp myprog 但这似乎存储TEMPDIR as tmp myprog 然后将 eval 作为每个引用此命令的新
  • 在许多驱动程序文件夹中创建 build-in.o

    我正在用我的自定义驱动程序构建内核 成功构建后 我发现了许多 build in o 文件 任何人都可以详细说明这些文件是如何在这里结束的吗 我只能怀疑这些与更高级别的 makefile 有关 built in o 文件是未构建为模块的内核的
  • 致命错误:向量:没有这样的文件或目录

    我有一个 Android 项目 其中包含大量 C 本机代码 但是 我无法构建我的库 因为它无法找到 vector h 头文件 可能是什么问题 我在几乎所有页面中包含的示例 include
  • Qt 和 MOC 的困境与简单的制作

    我想这更像是一个 GNU Make 问题 而不是 Qt 和 moc 但这里是 我有一个包含多个目录Q OBJECTS 我有一些简单的代码 它收集所有这些 例如 MOCS shell grep l Q OBJECT HEADERS Assum
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • 是否可以使用现有的 Makefile 在 Code::Blocks 中构建项目?

    编辑 我发现项目属性中有一个选项可以设置自定义生成文件 现在项目构建良好 现在 我偶然发现了如何在单击 运行 时指定要运行的目标可执行文件 代码 块 http www codeblocks org is an IDE https en wi
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的
  • 如何复制Makefile中的目录?

    我有一个目录images 我想复制到build images 从 Makefile 中 该目录可能包含多个级别的子目录 最优雅的方法是什么 我想 避免每个目录都复制完整的目录make运行 即不cp r 保证一致性 即如果文件在images
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • 在 Android 构建系统中包含预构建的静态库

    我需要基于预构建的静态库构建一个共享库 我的 makefile src android external mycode Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL A
  • 如何在 Makefile 中自动创建(和删除)临时目录?

    是否可以有make在执行第一个目标之前创建一个临时目录 也许使用一些黑客 一些额外的目标等 Makefile 中的所有命令都可以引用自动创建的目录 TMPDIR 并且该目录将被自动删除make命令结束 以前的这些答案要么不起作用 要么看起来
  • 如何处理GNU make中的子make错误?

    我在 Makefile GNU 中使用子 make 但每当子 make 失败时 主 make 都会继续成功运行 我希望每当我的子 make 失败时我的主 Makefile 都会失败 我怎么做 all pushd STA DIR make c
  • 如何将宏定义从“make”命令行参数(-D)传递到C源代码?

    我通常使用以下选项将宏定义从 make command line 传递到 makefile D名称 值 该定义可在 makefile 中访问 我还使用类似的编译器选项将宏定义从 makefile 传递到 源代码 Dname value 许多
  • Makefile:多个目标的相同规则

    我有一些目标 比方说 3 个 所以在makefile运行之后 我想要3个可执行文件 这是我现在所做的 CC gcc CFLAGS Wall pedantic ansi ECHO server echo ECHO O echo o FOO s
  • 判断Makefile是否用gmake执行

    假设在 FreeBSD 上 应用程序需要使用 GNU make gmake 进行编译 而不是标准系统 make 如果 Makefile 不是用 gmake 编译的 是否有任何指令可以放入 Makefile 中以停止执行它并打印错误 调用你的
  • QMAKE 中的 GNU make --jobs 选项

    我正在使用 qmake 为我们正在开发的小型 Qt C 应用程序生成 MinGW32 Makefiles 我的问题 所有这些双 四核 CPU 都闲置在那里 而只有一个线程正在进行构建 为了并行化 我尝试传递 jobs 4 来 make 但问

随机推荐

  • jquery 在视口检查器中同时检查多个元素

    我有一个 jQuery 函数来检查元素是否在视口中 如果是 它会添加 animate 类来启动动画并使元素可见 上面的方法有效 但现在 有多个元素 jQuery 仅针对该类的第一个元素blogcard 然后执行addClass animat
  • 证书对 Intranet SSL 有用吗?

    我的任务是开发命令行软件的内联网接口 现在我正在研究安全选项 我们的命令行应用程序已经完成 但我还没有开始编写 Web 界面 我不确切地知道潜在客户的安全要求是什么 尽管我相信ssh对于命令行界面来说通常是可以接受的 考虑到这一点 我请求帮
  • WebSocket 和纯 TCP 之间的根本区别是什么?

    我读过关于WebSockets http en wikipedia org wiki Web Sockets我想知道为什么浏览器不能像任何其他桌面应用程序一样简单地打开简单的 TCP 连接并与服务器通信 为什么可以通过 websocket
  • 如何将 Maven 原型添加到 Github?

    我已经使用 Maven 开发了我的自定义项目 我想将其分享给社区 是否可以将其放在 GitHub 上 以便可以从那里下载 并在 create archetype 命令中使用 谢谢 标记 这篇文章可能会提供一点帮助 http cemerick
  • 使用 NSSM 将 NodeJs 进程作为 Windows 服务启动不起作用

    我看过无数关于如何使用 NSSM 的文章 http nssm cc http nssm cc 启动 NodeJS 进程 所以 我有以下简单的 NodeJS 文件 var http require http http createServer
  • PowerShell 从具有多个属性的 XML 中获取属性值

    以下 XML 文件是使用 PowerShell 2 从 2008 R2 故障转移群集运行 Get ClusterGroup 命令的输出的一个对象节点
  • Spyder3 - AttributeError:“SpyderKernel”对象没有属性“_show_mpl_backend_errors”

    我的 Spyder3 有问题 当我打开它时 控制台上会出现此警告 Python 3 8 5 default Jul 28 2020 12 59 40 Type copyright credits or license for more in
  • 检测 IE11 及其内置内存泄漏何时耗尽内存(1.5GB 可回收池)

    IE11 有一个有据可查的 iframe 内存泄漏问题 在 SPA 中 如果您使用 iframe 内存将增长到大约 1 5GB 之后速度会变慢直至崩溃 我的任务是检测浏览器何时即将崩溃并尽快重新启动页面 该应用程序是嵌入在 ASP NET
  • 保持fork最新

    我想将一些东西提交到 github 存储库 但我 显然 没有任何权利这样做 我对该存储库进行了分叉 提交了更改并提交了拉取请求 现在的问题是 过了一段时间 其他人已经提交了原始存储库 这意味着我的分叉不再是最新的 现在应该如何更新我的 fo
  • 在 Windows 中以编程方式更改自定义鼠标光标?

    我正在尝试将 Windows 光标 默认为 Windows 自定义方案 更改为我的自定义光标 名为 割绳子 有没有办法将所有光标 箭头 忙碌 帮助选择 链接选择 更改为我的 割绳子 如果您想更改默认的鼠标光标主题 您只需在注册表中更改它即可
  • createprocess默认暂停[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在 dl
  • 如何调整 JavaFX 3D 子场景的大小?

    这段代码 http docs oracle com javase 8 javafx graphics tutorial camera htm CJAHFAHB将创建一个 300x300 大的 3D 场景 当我调整包含窗口 舞台的大小时 视口
  • mui 使用入口点插入作用域影子 DOM 样式时选择未设置样式的下拉选项

    请注意 这是针对 MUI v5 mui material 且NOT使用 v4 material ui core 最终弄清楚如何在使用情感入口点插入作用域阴影 DOM 样式时显示 mui material 样式 请参阅这篇文章如何在React
  • Android M:带有英雄元素的场景转换抛出 java.lang.IllegalStateException

    我有一个场景转换 但遇到了一些问题 带有英雄元素的场景转换抛出层超过最大值 GPU支持的尺寸 https stackoverflow com questions 26626344 scene transition with hero ele
  • 从 SiriKit 中的 INExtension 启动应用程序

    我想使用 SiriKit 开始锻炼 开始锻炼需要从应用程序扩展打开主应用程序 Apple 提供的样板文件INStartWorkoutIntentHandling处理程序是 func handle startWorkout startWork
  • 获取 Play 中当前循环的索引! 2 Scala 模板

    游戏中 1 可以在循环中获取当前索引 代码如下 list items myItems as item li Item item index is item li list Play2 中有类似的功能吗 for item lt myItems
  • 'pathutil' ruby​​ gem 与 jekyll (v3.9.0) 和 ruby​​ (v3.0.0) 兼容吗?

    我的问题 我有一个基于 jekyll 的静态网站 跑步后bundle exec jekyll serve 按照 jekyll 文档的指示 我得到下面的堆栈跟踪 我在堆栈跟踪中为该博客文章文件创建的 Markdown 文件完全是标准语法 我已
  • CollectionView 嵌套在 CollectionView 中

    我见过将集合视图嵌套在表视图中的解决方案 但对于我的应用程序 我需要有 2 个集合视图 因为这样可以更轻松地执行其他操作 所以我们调用根集合视图垂直集合视图仅垂直滚动和嵌套集合视图水平集合视图仅水平滚动 我使用故事板创建了它们 下面你会看到
  • Java 中的广度优先搜索

    我必须在 Java 中运行广度优先搜索来查找作业 我有一个 5x5 的图块网格 总共 24 个图块 1 个图块留为 空白 搜索的重点是通过向上 下 左或右移动 空白 来重新排列图块 最终将图块重新排列成正确的顺序 为了进行此搜索 我创建了一
  • 执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果

    From Bash 初学者指南表 7 1 https tldp org LDP Bash Beginners Guide html sect 07 01 html 我们可以说 FILE1 ot FILE2 将产生True if FILE1比