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“删除中间文件” 的相关文章

  • makefile 目标中可以有多个 % 符号吗?

    所以我有一个具有如下目标依赖项的 makefile all foreach lang LANGS foreach models MODELS targetName model xml lang targetName 目标如下所示 targe
  • 在 gnu make 中使用一个命令从多个文件生成多个文件

    假设目录输入中有 1000 个扩展名为 xhtml 的文件 并且这些文件的某个子集 例如 FILES 中的输出路径 需要通过 xslt 转换为目录输出中具有相同名称的文件 一个简单的 make 规则是 FILES output xhtml
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再
  • 如何调用使用 Define 创建的 GNU make 宏?

    在我的 Makefile 中调用 GREP 的两种方式有什么区别吗 我有什么理由应该使用其中之一 两者似乎产生相同的结果 define GREP word 3 shell echo define FOO 0xfff00100 endef a
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 使用 .INTERMEDIATE 在 makefile 中进行不可靠的并行构建?

    我有一个可以生成多个输出文件的工具 众所周知 在 make 中很难建模 我正在使用食谱GNU Makefile 规则从单个源文件生成一些目标 https stackoverflow com questions 2973445 gnu mak
  • 为什么这个 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
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 在 Mac 上更新 Make 版本

    我正在尝试更新 mac 上的 make 版本 但遇到了问题 最小项目依赖项是 4 1 但我的版本似乎是 3 81 我已将 Xcode 更新到最新版本并安装了命令行工具 但它似乎仍然是旧版本 有谁遇到过这个问题或知道解决方法吗 这是我所做的
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • makefile 目标依赖项取决于目标名称

    我有以下规则 SPECIAL file1 file2 o cpp a h CC c CFLAGS lt o 我希望如果 is in SPECIAL then b h已添加到依赖项列表中 有没有办法做到这一点 而不重复规则 您可以单独分配其他
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 使用 MS NMAKE 打印长编译行

    我有一个遗留的 MS NMAKE Makefile 我需要修复其中的一些错误 我希望调试一些非常长的命令行 这些命令行正在使用 NMAKE 技巧执行 内联文件 http msdn microsoft com en us library se
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的
  • 控制 make 命令的输出不那么冗长,不要回显每个命令

    目前 我正在使用 Makefile 来跟踪项目的所有依赖项和编译 问题是make只是输出它正在执行的所有操作 这使得很难发现 甚至读取 更重要的信息 例如编译器警告 有没有办法控制终端上显示哪些信息 我知道有一个 s沉默的选项make 但这
  • 将 make 与 msysgit 一起使用

    我在 Windows 7 上使用 msysgit 但它似乎没有附带 make 有没有一种简单的方法可以让 make 在 msysgit 上运行 我找到了一个link to make exe http repo or cz w msysgit
  • 链接 C 代码时如何判断符号的定义位置

    我面临着链接中特定符号的未定义参考问题 error undefined reference to g queue pop nth 我正在 LOP 和 ARM 平台上工作 我们在两个平台上使用相同的环境 我们的 ARM 构建可以毫无问题地链接
  • 在 Android 构建系统中包含预构建的静态库

    我需要基于预构建的静态库构建一个共享库 我的 makefile src android external mycode Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL A
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • Ubuntu 上对 exp 的未定义引用(包括 math.h 和与 -lm 的链接)

    我在尝试在 Ubuntu 上编译使用 exp 函数的程序时遇到一些问题 我从 gcc 收到此错误 selied Apolo Dropbox practicas UAM Neuro practica3 make gcc lm o retrop

随机推荐

  • 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