gnu make“删除中间文件”

2024-03-11

我有以下规则

define compile_c
$(ECHO) "CC $<"
$(Q)$(CC) $(CFLAGS) -c -MD -o $@ $<
@# The following fixes the dependency file.
@# See http://make.paulandlesley.org/autodep.html for details.
@# Regex adjusted from the above to play better with Windows paths, etc.
@$(CP) $(@:.o=.d) $(@:.o=.P); \
  $(SED) -e 's/#.*//' -e 's/^.*:  *//' -e 's/ *\\$$//' \
      -e '/^$$/ d' -e 's/$$/ :/' < $(@:.o=.d) >> $(@:.o=.P); \
  $(RM) -f $(@:.o=.d)
endef

vpath %.c . $(TOP)
$(BUILD)/%.o: %.c $(BUILD)/%.pp
    $(call compile_c)

vpath %.c . $(TOP)

$(BUILD)/%.pp: %.c
    $(ECHO) "PreProcess $<"
    $(Q)$(CC) $(CFLAGS) -E -Wp,-C,-dD,-dI -o $@ $<

当构建完成后,GNU make 会说
Removing intermediate files...并删除所有.pp我做的文件NOT want.

它为什么要这样做?
我该如何阻止它?


由于您使用的是 GNU Make,因此您可以对 Makefile 进行以下调整:

.PRECIOUS: $(BUILD)/%.pp  # ADD THIS LINE
$(BUILD)/%.pp: %.c
    $(ECHO) "PreProcess $<"
    $(Q)$(CC) $(CFLAGS) -E -Wp,-C,-dD,-dI -o $@ $<

The 文档 https://www.gnu.org/software/make/manual/html_node/Special-Targets.html有这个要说的.PRECIOUS指令:

的目标.PRECIOUS取决于 给予以下特殊处理:如果在执行其配方期间 make 被终止或中断,则目标不会被删除。

[...]

另外,如果目标是中间文件,则不再需要它后不会像通常那样将其删除。

[...]

您还可以列出隐式规则的目标模式(例如“%.o”)作为特殊目标的必备文件.PRECIOUS保留由目标模式与该文件名匹配的规则创建的中间文件。

这样做的好处是不会创建不需要的附加规则。您想要做什么也更清楚:保留珍贵的中间文件,重新创建这些文件可能会很昂贵。

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

gnu make“删除中间文件” 的相关文章

随机推荐

  • Zest:将图表导出为图像/pdf

    我使用 zest 框架创建了一个网络视图图 它使用 SWT 显示 shell 来显示 UI 我想将 UI 导出为图像 pdf 怎么做 有任何想法吗 您可以使用 SWT GC copyArea 方法将控件的内容复制到图像 然后将图像保存到文件
  • 多页 WPF 应用程序

    我是桌面应用程序开发的新手 有一个非常基本的问题 我有一个名为 MainWindow 的 WPF 表单 我应该如何在其上拥有多个页面 例如 用户管理 管理内容 等 我想我有以下选择 使用多种形式 Tabs 分组框 任何澄清都会很棒 在我最近
  • 如何防止 pandas 数据框中的索引显示在 Excel 中?

    我有一个 pandas 数据框 df 其中包含一些我想输出到 Excel 的数据 但是我不希望将默认索引或与此相关的任何索引打印到工作表中 是 df values 吗 df2 1 category num 2 A 1 3 A 2 4 B 3
  • safari 上的 onbeforeunload 不显示确认消息

    我的这部分代码适用于除Safari 10 iOS 和 OSX 问题是 Safari 会触发beforeunload event但它不会显示在确认消息中 function goodbye e console log goodbye en fa
  • Rscript 无法识别 setGeneric 函数

    我正在尝试将 R 脚本转换为客户端可以在批处理模式下运行的脚本 我的代码使用通用函数 接近开头的一个片段如下 setGeneric testInput function inputData params list standardGener
  • Visual Studio 2017 MSBuild 任务开发

    使用 Visual Studio 2017 RC 开发自定义 MSBuild 任务时 我遇到以下问题 只要添加其他依赖项 而不仅仅是Microsoft Build Utilities Core 使用 v15 1 0 preview 0004
  • 如何在 Android 应用程序中请求照片/媒体/文件权限

    在此输入图像描述 https i stack imgur com 2M033 png我希望我的应用程序请求照片 媒体 文件权限 因为第三方库需要它 任何人都可以告诉我要请求哪个特定权限 Thanks 文件 照片和媒体都保存在存储中 您的 A
  • 在 jboss 服务器中为 Web 应用程序进行新部署后,浏览器缓存文件未更新

    我正在使用 jboss Server 7 1 1 来部署 java web 应用程序 对于 js css 字体文件 浏览器缓存不会随着新的更改而更新 每次我们都坚持要求客户清除浏览器中的缓存以使新的更改生效 是否有任何我可以配置的配置 以便
  • VB6中列出文件夹中指定类型的所有文件的任何函数

    我想知道是否有一些内置函数适用于下面描述的场景 输入是父文件夹的路径 该函数必须做的是 它应该列出该父文件夹内的所有 zip 文件 父文件夹可以包含任意数量的子文件夹 这同样适用于子文件夹 任何人都可以帮我解决这个问题吗 VB版不是路障 V
  • Java 桌面应用程序 - 哪种技术? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要实现一个Java桌面应用程序 您会推荐哪种框架 SWT Swing Java FX 还是其他框架 我要求该应用程序应在 Windows x
  • Inno Setup TInputQueryWizardPage (CreateInputQueryPage) 上如何减小两个输入框之间的行距

    我有一个TInputQueryWizardPage具有 8 个用户输入的页面 这增加了向导页面 https stackoverflow com q 11778292 但所有值仍然不可见 有没有办法减少两个值之间的行距 以便所有值都以当前向导
  • http-proxy-middleware 中的 60 秒超时

    我在使用时看到 60 秒超时chimurai http proxy middleware in Create React App我不明白它是从哪里来的 我正在端口 5000 上运行 API 并进行配置setupProxy js as con
  • 在 matplotlib 中自定义 x 轴

    In the figure below each unit in the x axis represents a 10mins interval I would like to customize the labels of x axis
  • 如何在午夜更新应用程序小部件?

    我的应用程序有一个小部件 显示今天的日期 需要在午夜更新 该小部件在清单中定义为
  • 为什么使用 UIPanGestureRecognizer 移动对象时会出现延迟?

    我要搬家了UIView对象使用UIPanGestureRecognizer 我在屏幕上拖动手指的次数 我向同一方向移动视图的次数 仅在 X 方向上 向左或向右 Y 方向不变 它工作正常 但是 非常明显 delay 这是处理的方法UIPanG
  • 重命名 IAM 角色

    我在创建 IAM 角色以允许 lambda 函数访问 cloudwatch 日志并创建 EC2 卷快照时犯了一个拼写错误 有没有办法重命名角色 无论是使用控制台还是 AWS CLI 创建角色后 您无法编辑 IAM 角色 这在多个地方都提到过
  • 将 FASTA 文件中的多个序列添加到 python 中的列表中

    我正在尝试组织具有多个序列的文件 在此过程中 我尝试将名称添加到列表中 并将序列添加到与名称列表并行的单独列表中 我弄清楚了如何将名称添加到列表中 但我不知道如何将其后面的序列添加到单独的列表中 我尝试将序列行附加到空字符串中 但它将所有序
  • C# 如何判断 DVD 驱动器托盘是否打开?

    我有一个用 C 编写的 DVD 读取和刻录应用程序 我希望能够检测空驱动器 无磁盘 和打开驱动器之间的区别 编辑 经过更多谷歌搜索后 我认为更好的问题描述是 我想访问驱动器托盘状态 打开或关闭 我可以用 ManagementObjectSe
  • ASP.NET MVC5/IIS Express 无法调试 - 代码未运行

    我启动 VS2013 VB Net MVC5 Web 应用程序 在 HomeController About 方法中设置断点并运行 开始调试 导航到 About 页面并接收消息 Code not running The current Th
  • gnu make“删除中间文件”

    我有以下规则 define compile c ECHO CC lt Q CC CFLAGS c MD o lt The following fixes the dependency file See http make paulandle