make 总是重建 Makefile 目标

2024-01-12

我重新设计了大部分Makefile我的论文项目的文件,以便正确反映工作流程(为项目子目录中目标之间的依赖关系创建 make 规则 https://stackoverflow.com/questions/23910056/creating-make-rules-for-dependencies-across-targets-in-projects-sub-directories)。但是,在特定的子目录中(prepare), make always重建所有目标,即使依赖关系没有变化。这种意外行为的原因可能是什么?

NOTE: sf.done是一个真实的文件(类型,我称之为“标志文件”),位于不同的子目录中,并在数据收集完成后创建/更新(import) - 目标的相关步骤transform.

准备/生成文件:

IMPORT_DIR=../import

prepare: import \
         transform \
         cleanup \
         merge \
         sample

import: $(IMPORT_DIR)/sf.done
transform: transform.done
cleanup: cleanup.done
merge: merge.done
sample: sample.done

transform.done: transform.R import
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

cleanup.done: cleanup.R transform
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

merge.done: merge.R cleanup
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

sample.done: sample.R merge
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

.PHONY: import transform cleanup merge sample clean

# remove intermediate files
clean:
    rm -f tmp*.bz2 *.Rdata .Rout

UPDATE:

IMPORT_DIR = ../import
IMPORT_DONE = $(IMPORT_DIR)/sf.done

prepare: import \
         transform \
         cleanup \
         merge \
         sample

import: import.done
transform: transform.done
cleanup: cleanup.done
merge: merge.done
sample: sample.done

import.done: $(IMPORT_DONE)
    @cd $(IMPORT_DIR) && $(MAKE)

transform.done: transform.R import.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

cleanup.done: cleanup.R transform.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

merge.done: merge.R cleanup.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

sample.done: sample.R merge.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

.PHONY: import transform cleanup merge sample clean

你已经宣布了目标import transform cleanup merge sample clean to be .PHONY。这意味着 make 将始终认为它们已过时。

然后你声明各种.done目标取决于这些.PHONY目标。由于虚假目标总是被认为是过时的,所以那些.done目标总是需要更新,而配方总是会触发。

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

make 总是重建 Makefile 目标 的相关文章

随机推荐

  • Java - 如何导入外部包?

    我对 Java 还比较陌生 我尝试过寻找解决方案 但我认为我对 Java 的了解还不够 甚至不知道我应该寻找什么 我想尝试一下语音识别 所以我下载了 CMU 的 Sphinx 4 源代码并编译了它 一旦一切正常 我就可以很好地运行附带的演示
  • 在查询结果末尾添加总计行

    我试图在查询结果末尾有一个总计行 我使用 MS SQL 2012 需要一些帮助 这是我的查询 SELECT PropertyValue As Answer Count As rCount FROM QuestionerDetail AS T
  • 如何发现 std::vector 的大小/长度(以字节为单位)?

    我有一个向量 我想将其写入文件并将其读取到文件中 但无法使用以下方法确定向量的逻辑大小sizeof操作员 那我该怎么办呢 C std vector 有一个方法size 返回其大小 编辑 据我所知 您现在需要计算给定向量使用的内存 您不能为此
  • AVX 4 位整数

    我需要执行以下操作 w i scale v i point 比例和点是固定的 而v 是 4 位整数的向量 我需要计算w 对于任意输入向量v 我想使用 AVX 内在函数来加速这个过程 然而 v i 是 4 位整数的向量 问题是如何使用内在函数
  • 带有选项字段的 Django value_list

    The values list在过滤对象中 在 django 视图中提供解决方案确实对我有很大帮助 我的代码如下所示 并且这个有效 values list ac realdata objects filter product 1 value
  • XMPP:AngularJs + Strope.js

    我有一个在 strope js 上工作的基本 XMPP 客户端 登录时我创建处理程序 例如 connect new Strophe Connection http localhost http bind connect addHandler
  • Scala 中如何处理类型名称冲突?

    我正在写一个从Scanners这迫使我定义类型Token object MyScanner extends Scanners type Token 问题是我的令牌类本身被称为Token abstract class Token case c
  • 从容器内获取 docker 网络的私有 IP 来配置 xdebug remote_host

    因此 使用 docker 和 docker compose 我喜欢提供内置于容器中的工具 这样开发团队中的其他人就不必为设置而苦苦挣扎 在这种特定情况下 我在配置 xdebug 时遇到问题 从浏览器调试时使用回连功能绝对可以正常工作 但是尝
  • Python从父包导入

    我在 Python 中导入时遇到了一些问题 这是一个简单的例子来说明问题所在 我有一个这样的目录结构 app init py sub app init py 代码 应用程序 init py shared data data 123 from
  • 自定义 docker 容器 bash

    我尝试为 Docker 容器 bash 提示设置自定义配置 以在连接时显示 git 分支名称 我找到了一切可以正确执行的方法 但我无法执行 profile甚至 bash profile容器建筑物中的文件 如果我表演source profil
  • HTML5 中的注册机标签

    所以我在 HTML5 中遇到了这个新标签
  • 为什么我的对象不会死?

    我正在尝试实现一种机制 当保存缓存文件的对象死亡时 该机制会删除缓存文件 并决定使用PhantomReference获取有关对象垃圾回收的通知 问题是我一直遇到奇怪的行为ReferenceQueue 当我更改代码中的某些内容时 它突然不再获
  • ffmpeg:哪些文件格式支持标准输入使用?

    我知道 ffmpeg 能够读取数据stdin而不是使用从磁盘读取ffmpeg i 所有文件格式都支持吗 如果不是 是否有支持的文件格式列表 你需要跑ffmpeg protocols以确定是否pipe您的 ffmpeg 版本支持的协议 从标准
  • 调整图像大小并居中裁剪图像

    所以目前我正在尝试裁剪图片并调整其大小以使其适合特定尺寸而不丢失比例 一张小图来展示我的意思 我玩了一下vocaro 的类别 http vocaro com trevor blog 2009 10 12 resize a uiimage t
  • 使用 Rails 3.1,您将“页面特定”JavaScript 代码放在哪里?

    据我了解 所有 JavaScript 都会合并到 1 个文件中 Rails 在添加时默认执行此操作 require tree 到你的底部application js清单文件 这听起来像是一个真正的救星 但我有点担心特定于页面的 JavaSc
  • PayPal IPN 回发失败

    我最近将我的 Magento live 网站从 1 6 2 0 升级到 1 7 0 0 升级后开始 我现在在 PayPal 标准付款中遇到问题 当客户使用 PayPal 付款时 PayPal 上的付款会顺利进行 但 Magento 订单状态
  • Python 判断类是否为抽象(ABC)而不使用abstractmethod

    我有一个继承自的类ABC https docs python org 3 library abc html abc ABC 并且没有任何abstractmethod 我想检查它是否是一个抽象类 目前我很困惑 确定 Python 类是抽象基类
  • 当 C++ 引用离开其范围时会发生什么?

    如果我正确解释 C 引用 它们就像指针 但具有保证的数据完整性 没有 NULL 没有 int 0x12345 但是当引用对象的范围被保留时会发生什么 如果没有涉及魔法 可能不是 引用的对象将在我背后被销毁 我写了一段代码来检查这一点 inc
  • 致命错误:调用未定义的方法 mysqli_stmt::fetch_array() [重复]

    这个问题在这里已经有答案了 在此代码中 我收到错误 致命错误 调用未定义的方法 mysqli stmt fetch array 问题是什么 search player sql db gt prepare select job from jo
  • make 总是重建 Makefile 目标

    我重新设计了大部分Makefile我的论文项目的文件 以便正确反映工作流程 为项目子目录中目标之间的依赖关系创建 make 规则 https stackoverflow com questions 23910056 creating mak