在 makefile 中,目录名是假目标还是“真实”目标?

2024-04-08

根据我所读到的有关 makefile 的内容,虚假目标是指与实际文件名不对应的任何目标。我的直觉表明,作为目标的目录将被视为与文件相同。

为什么这很重要?我的 makefile 中有一个目录作为目标。当我将其作为主要可执行文件的先决条件时,无论一切是否都是最新的,该可执行文件总是会被制作。如果我把它作为先决条件,我的 makefile 足够聪明,可以知道什么时候需要构建东西,但我有不知道是否需要创建目录的问题。根据我对 make 的了解,任何虚假目标都不能作为先决条件,因为 make 不知道它们是否是最新的,因此它们总是会重建关联的目标。这是我的 makefile 的摘录。

$(EXEC_WITH_PATH): ${OBJ_DIR} $(DPEND) $(OBJS)
    @echo "--------------------------------------------";
    @echo "$(THIS_DIR)  $(MACHINE)";
    @echo "Linking Shared Library";
    @echo "ar -rc $(EXEC_WITH_PATH) INSERT::{OBJS}";
    ar -rc $(EXEC_WITH_PATH)  $(OBJS);
    @echo "--------------------------------------------";


# Make dirs for object code and links
${OBJ_DIR} :
        @if [ ! -d ${OBJ_DIR} ]; then \
                mkdir ${OBJ_DIR};    \
        fi;

所以在这种情况下,是${OBJ_DIR}、目录名、是否是虚假目标?


编辑:这仅适用于 GNU make - 考虑到“linux”标签,这是一个合理的假设。

你的目标是一个真实的目标,而不是一个虚假的目标。问题是,当您将目标放入其中时,输出目录会更新,以便它始终比您的目标新。这意味着您的目标将始终被构建,因为它的依赖项已经过时了。

你需要的是一个仅订购先决条件 http://www.gnu.org/s/hello/manual/make/Prerequisite-Types.html。这些先决条件允许您指定如果不存在则需要构建,但不需关注时间戳。也就是说,就仅订单先决条件而言,目标不会过时。

您可以这样指定:

$(EXEC_WITH_PATH): $(DPEND) $(OBJS) | ${OBJ_DIR}
...

竖线之后的任何内容都是仅订购的先决条件。

您现在可以使 OBJ_DIR 目标更简单:

${OBJ_DIR} :
        mkdir -p ${OBJ_DIR}

注意:我用过${OBJ_DIR}语法而不是$(OBJ_DIR)因为那是你用的。仅订单先决条件不依赖于该语法。

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

在 makefile 中,目录名是假目标还是“真实”目标? 的相关文章

  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 如何在点击EditText外部后隐藏Android上的软键盘?

    好吧 每个人都知道要隐藏键盘 您需要实现 InputMethodManager imm InputMethodManager getSystemService INPUT METHOD SERVICE imm hideSoftInputFr
  • Mysql 嵌套查询和 GROUP BY

    我正在尝试对我的数据库执行以下查询 SELECT source Month as t1 GROUP CONCAT SELECT SUM amount FROM reports GROUP BY Month as amount FROM re
  • 如何在应用程序内计费

    我从事编程多年 也做过一些专业的编程项目 最近 我有一个朋友询问如何创建一个电子商务网站 但我不得不拒绝她 因为我从未开发过可以计费的网络应用程序 将来我可能还需要编写一个基于订阅的 Web 服务 我的问题是 我该如何开始计费 我从来没有找
  • Python - 测试属性抛出异常

    Given def test to check exception is thrown self Arrange c Class Act and Assert self assertRaises NameError c do somethi
  • FirebaseInitProvider:FirebaseApp 初始化失败

    我们已经遵循了将 Firebase 添加到您的 Android 项目 https firebase google com docs android setup但我们在 Firebase 控制台中看不到应用程序接收数据 当我们启动应用程序时
  • 非终止 while 循环

    我只是想知道一些事情 我有以下代码 include
  • 如何在 Perl 中使用符号引用?

    在 Perl 中 如果一个变量保存另一个变量的名称 我如何使用第一个变量来访问另一个变量 例如 让 name bob bob jerk perlfan 我应该如何使用 name 来了解 Bob 是一个什么样的人 虽然我不太确定 但我模糊的记
  • 如何使用弱链接 CocoaPods 库构建 iOS 框架

    我正在尝试使用 Xcode 6 提供的新模板来构建一个 iOS 框架 Test framework 用于创建 Cocoa Touch 框架 该框架具有在 Podfile 中指定的不同依赖项 如 AFNetworking 或 Facebook
  • App Engine 上的 Servlet 响应中与缓存相关的 HTTP 标头被覆盖

    我在应用程序引擎上有一个提供图像的servlet Servlet 正确设置 HTTP 标头值以指示应缓存图像 但 App Engine 会覆盖这些标头 从而导致图像不被缓存 请注意 相同的代码以前可以工作 但现在一段时间不能工作 App 引
  • 在加载页面的所有元素之前加载 Chrome 扩展

    我想在页面的所有元素加载之前 而不是之后 加载我的 Chrome 扩展 这可能吗 谢谢 如果通过扩展你的意思是内容脚本那么你最多可以做的是设置 run at document start 清单中的财产意味着 内容脚本 文件是在 css 中的
  • 使用 PHP 的交互式 shell

    是否可以单独使用 PHP 创建交互式 shell 我的意思是像数据库一样 Python https en wikipedia org wiki Python 28programming language 29等等 如果是的话 怎么样 是的
  • Github 下载页面/按钮不再可见

    我曾经使用存储库中文件选项卡上的下载 添加下载 按钮上传二进制文件 这个功能好像没有了 有人知道为什么吗 临时 Github 问题 浏览器问题 GitHub 上传已于 12 月 11 日停止 请参阅博客文章 https github com
  • "rdtsc": "=a" (a0), "=d" (d0) 这是做什么的? [复制]

    这个问题在这里已经有答案了 我是 C 和基准测试的新手 我不明白这部分代码的作用是什么 所以我发现了一些关于 edx eax 寄存器的信息 但我不完全理解它是如何在代码中发挥作用的 所以我理解这段代码本质上返回了CPU周期的当前滴答声 那么
  • 如何在 Playgrounds 中设置 ViewController?

    在 Swift Playgrounds 中 如何设置视图控制器并使用它 我之前用 UIView 做过 但是当方向不同时 UI 会被剪切 所以我想尝试使用视图控制器 我有let view UIViewController 但在那之后我该如何设
  • Office-js Excel:获取新保存文件的文件名

    如何获取新保存文件的文件名 通常 我可以使用以下方式获取文件名 Office context document url 然而 当用户打开一个新工作簿时 它实际上没有文件名 而且奇怪的是 即使保存后 这行代码也不起作用 相反 他们必须保存它
  • 在 UIImage iOS 6.0 的所有四个面上添加阴影

    我正在尝试向 imageView 的所有四个侧面添加阴影 我看到 self shadowView layer shadowOffset CGSizeMake 10 20 在两侧添加阴影 如何在四个面上都添加阴影 刚刚设置shadowOffs
  • 从列表创建变量并全局访问

    我正在编写一个程序 从数据库中提取部门列表 我想避免对此进行硬编码 因为列表可能会发生变化 我想为每个部门创建一个变量 将问题填充到 GUI 中 我遇到的问题是我可以使用 vars 函数从数据库列表中创建变量 然后 我存储变量名称列表 以便
  • Java 相当于 C++ 加密 [重复]

    这个问题在这里已经有答案了 我有以下用于加密的 C 代码片段 EVP CIPHER CTX ctx const EVP CIPHER cipher EVP des ede3 cbc unsigned char iv EVP MAX IV L
  • 如何通过直接链接将 WebCal/iCalendar 添加到 Google 日历

    您可以通过直接链接将 Google 托管的日历添加到您的 Google 日历帐户 例如澳大利亚假期 https www google com calendar embed src en australian 23holiday 40grou
  • 在 makefile 中,目录名是假目标还是“真实”目标?

    根据我所读到的有关 makefile 的内容 虚假目标是指与实际文件名不对应的任何目标 我的直觉表明 作为目标的目录将被视为与文件相同 为什么这很重要 我的 makefile 中有一个目录作为目标 当我将其作为主要可执行文件的先决条件时 无