通过相同的 Makefile 生成 Makefile 的包含文件

2024-05-06

在我的程序中,我有一个有点复杂的构建过程。目前,在我使用的一个目录中include in Makefile.am对于一个文件,该文件不存在,但必须自行构建。原因是这个包含文件相当长。此外,在实际程序中,它不仅仅是一个文件,而是多个文件,并且该文件的生成过程可能会不时发生变化。

The Makefile.am看起来像这样

noinst_LIBRARIES = libtest.a
nodist_libtest_a_SOURCES = file.c
CLEANFILES = file.c Make_file.mk 

$(builddir)/Make_test.mk: $(srcdir)/Perl/generate_mk_files.pl
      perl $(srcdir)/Perl/generate_mk_files.pl file

include $(builddir)/Make_file.mk

创建后Make_file.mk它看起来像

$(builddir)/file.c: $(srcdir)/file.template $(srcdir)/Perl/generate_c.pl
      perl $(srcdir)/Perl/generate_c.pl $(srcdir)/file.template

Automake 和最终的构建过程都有效。输出到make是这样的(我稍微缩短了它):

Makefile:721: Make_file.mk: Datei oder Verzeichnis nicht gefunden (file not found)
perl ../../../../src/components/test/Perl/generate_mk_files.pl test
perl ../../../../src/components/test/Perl/generate_c.pl ../../../../src/components/test/file.template

所以,make首先抱怨找不到包含文件,然后创建它,然后也遵循包含文件的规则。

虽然我很高兴它有效,但我想知道为什么。首先,我认为make加载Makefile。在这一步中,Make_file.mk不存在。因此看来Makefile被加载多次。

此外,manual https://www.gnu.org/software/automake/manual/html_node/Include.html汽车制造商的include states:

请注意,这些片段是由 automake 读取和解释的,而不是由 制作。

这不是我看到的,因为包含的片段在 Automake 执行期间不存在。

我的问题基本上是:

  • 为什么它有效?
  • 这是执行此操作的正确方法还是我应该使用其他方法,例如启动新实例make within Makefile.

我不太了解 Automake,但是,从 GNU make 手册来看:

如果在这些目录中都找不到包含的 makefile {标准包含目录} ,A 生成警告消息,但它不是立即致命的 错误;继续处理包含 include 的 makefile。一旦完成读取 makefile,make 将尝试重新制作任何 已过时或不存在。请参阅如何重新制作 Makefile。 只有在尝试找到重新制作 makefile 的方法但失败后, 会将丢失的 makefile 诊断为致命错误。

如果您希望 make 简单地忽略不存在的 makefile 或 无法重制,没有错误消息,使用 -include 指令 而不是包含,像这样:

-include filenames…

这就像以各种方式包含一样,除了如果任何文件名(或任何文件名)都没有错误(甚至没有警告) 任何文件名的先决条件)不存在或不能存在 重做。

所以基本上,在完成对主 Makefile 的解析之前,make 无法执行重新生成包含文件的配方。因此它会发出警告,继续读取Makefile,找到重新制作包含文件的规则,重新制作它,然后重新启动自己(这在如何重新制作Makefile部分中有详细解释)。

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

通过相同的 Makefile 生成 Makefile 的包含文件 的相关文章

  • 在 Mac OS X 上的 Makefile 中设置 PATH(但它适用于 Linux)

    我可以在 Linux 上的 Makefile 中设置 PATH 但不能在 Mac OS X 上设置 在 OS X 中 可以设置 PATH 但不会使用 这是一个演示 在带有 bash 4 1 2 1 release 和 GNU Make 3
  • 什么是“制定目标”?

    为什么我需要制作一个make target在能够构建我的源代码之前 更具体地说 什么是制定目标 http publib boulder ibm com infocenter rsdvhelp v6r0m1 index jsp topic o
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再
  • 将环境变量从 Makefile 导出到用户态环境

    我正在研究如何从 Makefile 环境变量导出以在用户环境中公开 因此应该可以从用户 shell 访问从 Makefile 导出这些变量 我努力了make s export https www gnu org software make
  • 抑制 makefile 中命令调用的回显?

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

    如何在 OSX 上将 libjpeg 8 安装到 opt local 我问的原因是我想用以下方法制作大脑活动的小电影MNE C 库 http www nmr mgh harvard edu martinos userInfo data MN
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 如果未设置,则从控制台读取 Makefile 变量

    我正在更新一个从外部源访问某些资源的 Makefile 即存在以下形式的规则 External cvs up 对于不受限制的资源 它可以按预期工作 现在 出现了功能漂移 外部资源需要更复杂的登录 因此规则已更改为与此没有太大不同的内容 Ex
  • .ko 文件是如何构建的

    我正在尝试将我自己的驱动程序移植到Beagle 板 xm arm cortex A8 在移植时我试图弄清楚如何 ko文件实际构建 在我们的Makefile我们只有一个命令来构建 o file 怎样是一个 ko文件已建立 使用Linux 2
  • 避免使用 git 和 make 重新编译

    我在 git 中有两个开发分支 并且经常需要在两者之间进行更改 然而 真正令人沮丧的是 每次我在 git 中更改分支时 整个项目都会重新构建 因为某些文件的文件系统时间戳会发生变化 Ofc makefiles 配置为将项目构建到两个不同的构
  • make:无需为“all”执行任何操作

    我正在通过一个eg pgm 来创建一个make 文件 http mrbook org tutorials make http mrbook org tutorials make 我的文件夹eg make creation包含以下文件 des
  • 如何将当前目录捕获为 make 变量中的绝对路径名?

    我想在 GNUmake 文件运行期间获取当前目录并将其放入 make 变量中 执行此操作的语法是什么 像这样的东西吗 DIR PWD Um no PWD有时是在您的环境中定义的 因此由 make 继承 但通常不是 你需要 CURDIR DI
  • 从 GNU Makefile 调用 `command -v find`

    我使用 shell bash 但我需要可移植性 和 GNU Makefile 我有这个代码 check commands command v find gt dev null command v asdf gt dev null 正如假设的
  • 标题的宏定义,放在哪里?

    定义头文件依赖的宏时 例如 FILE OFFSET BITS FUSE USE VERSION GNU SOURCE其中 放置它们的最佳位置在哪里 我考虑过的一些可能性包括 位于依赖于该文件中包含的标头公开的定义的任何源文件的顶部 紧接在相
  • Makefile:没有规则来制作目标

    我正在关注本指南makefile http www cs colby edu maxwell courses tutorials maketutor 但我根本不理解最后一个例子 并且我无法让我的 makefile 工作 因为我收到了错误ma
  • 为什么 make 会删除我的临时文件?

    我有一个简单的 Makefile PHONY clean PROGRAMS patsubst main cpp example wildcard main cpp all PROGRAMS GCCVERSION shell gcc dump
  • 如何在configure.in中测试C++库的可用性?

    我正在 GNU Linux 上开发一个 C 项目 并且正在寻找一种方法来使用 Autotools 测试 IBM Informix 库的存在性和可用性 即编辑configure in 我没有使用 Autotools 的经验 所以基本上我是从该
  • 用于编译和运行 C++ 的 bash 脚本

    我正在尝试进入 C 但必须使用冗长的命令通过命令行运行东西很烦人 所以我想制作一个 bash 脚本来简化过程并运行这些命令 bin bash if 1 start then cd CCPP cd HelloWorld g Wall W We
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 使用 Makefile 项目在 Visual Studio 中自定义调试命令

    我在 Visual Studio 2010 中有一个由 Makefile 支持的项目 实际上使用 NAnt 但这不是重点 构建过程的输出是一个 elf 文件 我有一个单独的非 VStudio 调试器 可以在该 elf 文件上运行来调试它 构

随机推荐

  • 想要运行命令列表,但能够在运行时编辑该列表

    我有一个要运行的 bash 命令列表
  • 使 Flex 子项的高度等于网格列内父项的高度

    我正在尝试构建一个定价表 其中每列都包含一张卡片 我希望所有卡片都拉伸到其父 col 元素的高度 注意 我正在使用 Bootstrap 4 并尝试使用现有的网格系统来实现这一点 为了保持一致性 并使用这个特定的标记 我无法让卡片增长到其父容
  • 如何使用 Asp.Net MVC 3 和 Razor 获得特定于视图的 内容?

    除了 Layout cshtml 中已链接的内容之外 我还想在某些视图中链接特定的样式表 对于非 Razor 我看到使用内容占位符 我该如何为 Razor 执行此操作 Razor 中的内容占位符相当于部分 在你的 Layout cshtml
  • /usr/sbin/install 到底有什么作用?

    我正在尝试安装discount https github com Orc discount on my VPS http no de它基于Solaris 设置一些环境变量后编译效果很好 但是安装失败 https gist github co
  • Web 本地应用程序 Apache:运行 shell 脚本

    我开发了一个 shell 脚本 我想用它创建一个 UI 我决定使用带有本地服务器的 Web 界面 因为我对 HTML PHP 的了解很少 比 QT 或 Java 的了解更多 我只是希望我的 html 可以在我的计算机上运行 shell 脚本
  • 如何使用文本框在数据网格视图中搜索数据?

    这是我当前的代码 private void searchTextBox TextChanged object sender EventArgs e dataGridView1 DataSource as DataTable DefaultV
  • Chrome DevTools 中的渲染去了哪里?

    看起来渲染设置不再是原来的位置 即启用绘画闪烁 显示图层边框 显示 FPS 仪表 显示滚动性能问题 我怎样才能再次访问这些功能 渲染设置已移动铬48 您现在可以通过三点菜单图标 更多工具 渲染设置来访问它们 或者 您可以通过底部窗格的新菜单
  • 用宏包装函数(无需重命名)C

    我有兴趣通过包装现有函数调用来添加一些额外的逻辑without重命名它们 仅供测试 我发现的现有解决方案依赖于将函数包装在不同名称的宏中 这可能意味着更改大量代码 有什么建议么 请注意 我知道LD PRELOAD 但我有兴趣使用宏来检查传递
  • Vuetify 默认轮播 CSS 选择器,用于减少过渡持续时间

    I need a transition that does not produce the dreaded image blinking for a v carousel item Ideally it s a smooth and qui
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • 我要疯了吗? jQuery .click() 似乎不起作用

    下面的代码不适用于任何浏览器 它应该显示一个警报框 我究竟做错了什么 a href test a 将其放入 document ready 中
  • 获取所有按钮标签类型

    有没有办法使用 javascript 获取特定页面上的所有按钮标签及其类型 将此代码放在文档的加载事件中或 HTML 的底部 var buttons document getElementsByTagName button for let
  • 搜索并替换字符串 t-SQL

    每个人我都试图编写一个查询来替换末尾出现的所有字符串 我有一些干扰词 确切地说是 104 个 如果它们出现在字符串末尾 则需要将其从字符串中删除 例如 两个干扰词是 Company LLC 以下是一些示例和预期输出 American Com
  • JS 按特定排序顺序排序

    我需要按特定顺序对数据进行排序 如下所示 const sortBy b a c e d const data a d e 我知道如何按升序 降序排序 console log data sort a b gt a gt b a d e con
  • 以静默方式安装应用程序,并授予 INSTALL_PACKAGES 权限

    我正在尝试将 apk 静默安装到系统中 我的应用程序位于 system app 并成功授予权限 android permission INSTALL PACKAGES 但是我在任何地方都找不到如何使用此权限 我尝试将文件复制到 data a
  • UITextView 格线背景但行高错误

    我有一个 UITextView 用户可以在其中创建注释并保存到 plist 文件中 我希望能够像普通笔记本一样显示线条 我遇到的问题是 文本无法正确对齐 下图很好地解释了这个问题 This is the background I use t
  • Google 脚本图表默认排除标题

    使用以下脚本 function chartCreation var ss SpreadsheetApp getActive var sheet ss getSheetByName Sheet1 var chart sheet newChar
  • IBM.EntityFrameworkCore - 未调用 DbContext.OnConfiguring 和 DbContext.OnModelCreating

    一旦我解决了一期 https stackoverflow com questions 45782871 net standard 2 0 entityframeworkcore db2 ibm entityframeworkcore iss
  • Google Apps 脚本无法从托管的 GAS 转换为特定的云项目

    我有一个 GAS 管理的项目 我想将其转换为特定的谷歌标准云项目 我有身份证 我将其输入到资源 云托管项目中 然后得到 项目不存在 或者您需要对其进行编辑访问 它确实存在 并且我拥有权限 因为我是所有者 该错误有些误导性 我花了一段时间才弄
  • 通过相同的 Makefile 生成 Makefile 的包含文件

    在我的程序中 我有一个有点复杂的构建过程 目前 在我使用的一个目录中include in Makefile am对于一个文件 该文件不存在 但必须自行构建 原因是这个包含文件相当长 此外 在实际程序中 它不仅仅是一个文件 而是多个文件 并且