我怎样才能强制Make一直执行一个菜谱

2024-05-12

当前的 Makefile 有这样的内容:

target1 : lib1.a  lib2.a

target2 : lib1.a  lib3.a

target3 : lib3.a 

lib1.a:
    $(MAKE) -C sub_dir all

我想更改此 Makefile,以便目标依赖于任何地方lib1.a,它总是运行命令“$(MAKE) -C sub_dir all“,总是。换句话说,在上面的示例中,target1和target2将始终运行”$(MAKE) -C sub_dir all”。有什么办法可以做到这一点吗?

我知道以下方法不起作用:

target1 :  lib2.a
    $(MAKE) -C sub_dir all

target2 :   lib3.a
    $(MAKE) -C sub_dir all

target3 : lib3.a 

因为如果 lib2.a 没有更新,则该命令不会运行。我有一个限制,我只能控制 lib1.a,我无法更改 lib2.a 的构建方式。

任何帮助表示赞赏!


UPDATE: 我使用了以下解决方案:

target1 : lib1.a  lib2.a

target2 : lib1.a  lib3.a

target3 : lib3.a 

lib1.a: relay

.PHONY: relay
relay:
    $(MAKE) -C sub_dir all

The GNU 帮助 https://www.gnu.org/software/make/manual/html_node/Force-Targets.html说 FORCE 不如 .PHONY 高效,但从你的解释来看,在我看来 FORCE 更好。难道是我理解错了?


我认为一个Force Target http://www.gnu.org/software/make/manual/make.html#Force-Targets就是您在这里寻找的。

lib1.a: FORCE
        $(MAKE) -C sub_dir all

FORCE: ;

相比于一个.PHONY规则(按照@MadScientist的建议here https://stackoverflow.com/questions/26226106/how-can-i-force-to-run-a-command-all-the-time#comment41133336_26226106)这本身不会强制所有依赖于的目标lib1.a一直在重建。只有在以下情况下才会这样做lib1.a实际上发生了变化。

不过,更好的解决方案可能会完全摆脱子品牌,并且实际上具有以下依赖信息:lib1.a可用于此 makefile(直接或通过包含在sub_dir)因为这避免了整个“强制这个配方,因为我无法告诉你如何判断目标是否需要更新”问题。

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

我怎样才能强制Make一直执行一个菜谱 的相关文章

  • 避免重复 GNU Make 规则

    我一直在编写一个执行一些依赖项生成的 Makefile 我发现自己必须重复规则 因为 遗留 代码库包含以下内容的混合 cpp and cc文件 好像有点难看 无论如何 是否可以指定目标的先决条件可以是 cpp or cc files 所以而
  • 抑制 makefile 中命令调用的回显?

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

    我有一个包含包含语句的 makefile 我无法控制包含的 makefile 的内容 不过 我希望能够在 某些 不是全部 目标之前添加一些预处理步骤 考虑以下示例 install echo install target include ot
  • 使用 .INTERMEDIATE 在 makefile 中进行不可靠的并行构建?

    我有一个可以生成多个输出文件的工具 众所周知 在 make 中很难建模 我正在使用食谱GNU Makefile 规则从单个源文件生成一些目标 https stackoverflow com questions 2973445 gnu mak
  • 内核makefile中的$(call cmd,tags)这里的cmd指的是什么?

    在内核 Makefile 中我发现如下代码 ctags CTAGS CSCOPE HEADERS SOURCES ETAGS ETAGSFALGS HEADERS SOURCES call cmd ctags 另外 在哪里可以找到宏或函数
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 在许多驱动程序文件夹中创建 build-in.o

    我正在用我的自定义驱动程序构建内核 成功构建后 我发现了许多 build in o 文件 任何人都可以详细说明这些文件是如何在这里结束的吗 我只能怀疑这些与更高级别的 makefile 有关 built in o 文件是未构建为模块的内核的
  • 如何在 makefile 中拥有正确的 .mod 顺序

    我正在尝试用 Fortran 为我的项目创建一个 Makefile 并使其可在现在的项目中重用 我经过多次尝试后得出的 Mkefile 如下 问题是它在少数情况下工作正常 但现在我有这个文件 main f90 初始 f90 参数 f90 函
  • 致命错误:向量:没有这样的文件或目录

    我有一个 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
  • 使用 MS NMAKE 打印长编译行

    我有一个遗留的 MS NMAKE Makefile 我需要修复其中的一些错误 我希望调试一些非常长的命令行 这些命令行正在使用 NMAKE 技巧执行 内联文件 http msdn microsoft com en us library se
  • 从 GNU Makefile 调用 `command -v find`

    我使用 shell bash 但我需要可移植性 和 GNU Makefile 我有这个代码 check commands command v find gt dev null command v asdf gt dev null 正如假设的
  • make:仅针对单个目标禁用子目录中的并行构建

    我有一个相当庞大的由自动工具驱动的项目 它位于一个目录树中 该目录树由许多带有子目录的目录组成 它有一个目标check 在每个子目录以及主目录中 执行大量自动化测试 这check目标是递归构建的 并行构建和测试 通过 j选项 make 适用
  • Makefile 和跨平台开发

    我一直在试图弄清楚如何创建一个可以为所有主要操作系统编译的 C 程序 我考虑过使用 makefile 所以我只需要更改目标操作系统 但我有一些问题 我的第一个问题是 我不知道如何更改目标操作系统 以便我可以在一个操作系统上编译 但在所有操作
  • Makefile:没有规则来制作目标

    我正在关注本指南makefile http www cs colby edu maxwell courses tutorials maketutor 但我根本不理解最后一个例子 并且我无法让我的 makefile 工作 因为我收到了错误ma
  • Windows 上 gnu make 的 libintl3 和 libiconv2 在哪里,需要在 MinGW 上用 ruby​​ 编译 vim

    我正在尝试为 Windows 运行 gnu make 但它无法运行 因为libint3 dll没找到 果然 http gnuwin32 sourceforge net packages make htm http gnuwin32 sour
  • 生成带有完整路径的 gcc 依赖项

    我有一个简单的项目 看起来像这样 build file1 o one file1 o file2 o depend Makefile src file1 cpp one file1 cpp file2 cpp Makefile 是这样的 G

随机推荐

  • 是否可以在两个应用程序之间共享一项应用程序内购买?

    我的产品有两种不同的版本 一种用于 iPhone 另一种用于 iPad 是否有可能解锁功能通过应用内购买in both与其中之一一起玩一次 您不能使用相同的 ID 但是 您可以管理有关哪些用户在您自己的服务器上进行了哪些购买的信息 并在用户
  • Python 脚本在开机时启动

    我正在制作一个简单的 python 脚本作为在后台运行的可执行文件运行 有没有办法让它在启动时运行 我知道我可以将可执行文件添加到启动目录 但这需要我根据我的机器对其进行硬编码 我希望它也能在其他机器上运行 Windows 和 ubuntu
  • 在不丢失基数信息的情况下对 TensorFlow 数据集进行窗口处理?

    tf data Dataset window返回一个新的数据集 其元素是数据集 这些嵌套数据集的元素是所需大小的窗口 如果您有一个数据集 例如 Dataset range 10 并想要一个像这样的窗口数据集 0 1 2 1 2 3 7 8
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • page.goto() 上的云函数超时

    我在云函数中使用 puppeteer 运行测试 如果我在本地机器上运行测试一切都很好 如果我在云函数模拟器中运行测试也没关系 但是当我将函数部署到云端时 所有测试都停留在 page goto https 并且函数因超时而失败 在我的例子中是
  • 如何从字符串列中提取数字?

    我的要求是从列中的评论列中检索订单号comment并且总是开始于R 订单号应作为新列添加到表中 输入数据 code id mode location status comment AS SD 101 Airways hyderabad D
  • 用于从深层嵌套列表/元组中提取元素的递归函数

    我想编写一个从深层嵌套元组和列表中提取元素的函数 假设我有这样的东西 l THIS THAT a b c THAT d e f 我想要一个没有 这个 和 那个 的简单列表 list a b c d e f 这是我到目前为止所拥有的 def
  • 如何在 MS Word 中的每个标题末尾应用宏?

    我有一个包含各种标题的文档 因此不一定是标题 1 或标题 2 而是所有类型的标题 我想做的是编写一个宏 例如 删除每个标题末尾的 2 个空格 例如 我们有 这是一个标题 在标题的最后 我会这样做 Selection Delete Unit
  • 批处理文件测试错误级别

    我试图在另一个 exe 成功执行时有条件地从批处理文件有条件地运行一个 exe 我尝试了 IF 和 ERRORLEVEL 的几种不同组合 但似乎都不起作用 TeamBuildTypes Current Branch DatabaseUpda
  • 在我们的 Rails3/Heroku 应用程序中设置 Paperclip + AWS S3 用于图像存储时遇到问题

    我们已经构建了一个 Rails 应用程序 它有多个用户和每个用户的图像 在我们的本地主机上完成所有开发工作 我们为用户和照片提供了工作种子 但现在我们尝试使用 S3 进行图像存储 我们在 总是在 种子 期间遇到错误执行此操作时迁移的步骤 耙
  • 在python中将数字转换为字符串

    我遇到了将数字转换为字符串的问题 我想从 str 0100 获取字符串 0100 但我得到的是 64 有什么方法可以从 0100 获取字符串 0100 UPDATE 感谢许多人指出前导 0 是八进制的指示符 我知道 我想要的是将 0100
  • 与两点相交的圆心

    给定 2D 平面上的两个点 以及与这两个点相交的半径为 r 的圆 计算该圆中心的公式是什么 我意识到圆圈可以放置在两个地方 当从任意角度开始扫描围绕其中一个点连接两个点的线时 我希望首先沿顺时针方向遇到其中心的圆 我想这是我的问题的下一阶段
  • 保留子网范围内的私有IP地址

    我有一个 Arm 模板 其中有一个带有 2 个子网的 vNet 我正在尝试使用静态专用 IP 地址将网卡部署到其中之一 它曾经是动态的 并且运行良好 现在它是静态的 我已经设置了我想要网卡拥有的IP 但是当我部署时 它说IP无效 我尝试更改
  • org.openqa.selenium.SessionNotCreatedException:会话未创建已断开连接:无法将消息发送到 ChromeDriver 和 Chrome 的渲染器错误

    我尝试使用 Selenium 在 Java 上运行这个简单的程序 import org openqa selenium WebDriver import org openqa selenium chrome ChromeDriver pub
  • Hibernate 抛出奇怪的错误:类未映射

    这是错误 org hibernate hql ast QuerySyntaxException Payment is not mapped select p from Payment p 我不明白为什么会抛出这个错误 应该映射该类 正如我将
  • 数据库不存在。确保名称输入正确

    为什么我会出现这个错误 如果您查看屏幕截图 您将看到数据库 仅当我连接到两个数据库引擎时才会发生这种情况 它仅检测下面数据库引擎中的数据库 而不检测突出显示的数据库 除了关闭应用程序并仅打开一个数据库引擎之外 还有其他方法可以使用我的数据库
  • 如何使用 EclipseLink 处理以 Oracle 类型作为输入或输出的 Oracle 存储过程调用

    我进行了概念验证 以了解使用 EclipseLink 调用存储过程的效率如何 我能够使用带有标量 原始数据类型 链接整数 varchar 等 的 EclispeLink 来调用 Oracle 存储过程 我想了解如何使用集合 Oracle 类
  • PDO 库比本机 MySQL 函数更快吗?

    我已经阅读了几个与此相关的问题 但我担心它们可能已经过时 因为自这些问题得到解答以来 更新版本的 PDO 库已经发布 我编写了一个 MySQL 类 它构建查询并转义参数 然后根据查询返回结果 目前这个类正在使用内置的mysql函数 我很清楚
  • Nhibernate 出现 TransactionScope 错误 - DTC 事务预准备阶段失败 - 升级到 Nhibernate 3.0

    在事务 Scope Eg 中使用 Nhibernate 和 ADO Net 操作时 出现以下异常 Nhibernate 2 1 没问题 但现在升级到 3 0 会抛出错误 using var scope new TransactionScop
  • 我怎样才能强制Make一直执行一个菜谱

    当前的 Makefile 有这样的内容 target1 lib1 a lib2 a target2 lib1 a lib3 a target3 lib3 a lib1 a MAKE C sub dir all 我想更改此 Makefile