如何指定 Makefile 目标构建顺序而不放置任何物理依赖项?

2023-12-05

我一直在开发一个链接到 .so(动态库)文件的 C++ 项目。 假设我有一个目标PROG需要链接到a.so,并且a.so也是我构建的,在下面的Makefile中指定。

PROG_SRCS = prog.cpp
PROG_OBJS = $(PROG_SRCS: %.cpp:%.o)

all: PROG
PROG: $(PROG_OBJS) liba.so
    $(LINK.cpp) -o $@ $(PROG_OBJS) -la

LIBA_SRCS = liba/a.cpp
LIBA_OBJS = $(LIBA_SRCS: %.cpp:%.o)

liba.so: $(LIBA_OBJS)
    $(LINK.cpp) -shared -Wl.-soname,$@ -o $@ $^

我使用自动依赖生成来让 .cpp 文件获得自己的依赖 .h 文件。 prog.cpp 包括 a.h.

但是这样一来,一旦我改变了a.cpp,liba.so就会被remake,那么PROG就会是 重制(重新链接),这不是我想要的。我只是改变了liba.so的实现, 但没有任何接口定义。 PROG应该在我改变之后重新制作a.h.

我想让a.so应该在PROG构建之前构建,但是a.so的更改不会引起PROG的构建。

下面的Makefile是我想出来的方法,但是有一点副作用 (生成临时文件)。

ORDER = /tmp/.ORDER

all: PROG
PROG: $(PROG_OBJS) $(ORDER)
    $(LINK.cpp) -shared -Wl,-soname,$@ -o $@ $(PROG_OBJS) -la

$(ORDER): liba.so
    test -e $@ || touch $@

这样,每次 liba.so 被重制时,$(ORDER) 也会被重制。但它只触及 该文件(如果不存在)。

有没有什么方法可以指定这种依赖关系而没有任何副作用,例如创建一个 tmp 文件。


如果您愿意依赖 GNU make 的不可移植方面,则可以使用仅限订单的先决条件仅订单先决条件为了这。这是除了您已经发现的标记文件方法之外的唯一方法。

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

如何指定 Makefile 目标构建顺序而不放置任何物理依赖项? 的相关文章

  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 获取指向非静态成员函数的函数指针

    假设我有一堂课 class A public A void myFunc 然后在程序中的不同点我创建类 A 的实例 并尝试获取指向的函数指针myFunc A a new A ATTEMPTS AT RETRIVING FUNCTION PO
  • 无法使用 Fancybox 获取要通过 AJAX 发布的表单数据

    我使用 Fancybox 在单击链接时弹出联系表单 然后它将表单数据 POST 到 php 文件 发出一封电子邮件并返回一条成功消息 在我提交表单后 页面重新加载 数据似乎无处可去 如果我在不使用 AJAX 的情况下提交表单 它可以正常工作
  • 登录页面无法正常工作

    当我第一次打开登录页面时 即使我使用正确的用户名和密码 登录页面也不会重定向到主页 但在第二次登录时 它被正确重定向到主页 login php 的代码如下所示 login php 的其余部分是简单的 html 登录表单数据被发送到 vali
  • PHP:从文件中读取特定行

    我正在尝试使用 php ini 从文本文件中读取特定行 这是文本文件 foo foo2 如何使用php获取第二行的内容 这将返回第一行 但我需要第二个 任何帮助将不胜感激 myFile 4 24 11 txt lines file myFi
  • Spring 3.0 / AOP / Aspectj:autoproxy拦截任何对 getConnection() 的调用

    我试图拦截对 getConnection 方法的任何调用来设置 dbms 标识符 我已经实现了一个方面来获取它 但我什么也没得到 任何想法 谢谢 import java sql CallableStatement import java s
  • 尽管调试已关闭,UI5 仍继续加载调试源

    我的 SAPUI5 应用程序通过以下方式使用模块SAP CDN 在 DevTools Network 选项卡中我看到发起者许多文件是调试版本 例如 jquery dbg js 我用 SAPUI5 诊断工具检查过 调试已禁用 No sap u
  • 检测并删除异常值作为管道的一个步骤

    我有一个问题 我正在尝试构建自己的类以放入 python 中的管道中 但它不起作用 我试图解决的问题是多类分类问题 我想做的就是在管道中添加一个步骤来检测和删除异常值 我找到了这个检测并删除管道Python中的异常值这与我所做的非常相似 这
  • 设置“float”作为单精度对象的存储模式

    我希望在 R 中将对象的精度显示为 浮点 同时具有单精度 目前它存储为默认类型 double timevector c 1 5 4 5 7 5 10 5 13 5 16 5 19 5 22 5 typeof timevector displ
  • 如何使用 BjyAuthorize 重定向到登录页面

    我想将一些页面重定向到登录页面而不是403页面 默认情况下 BjyAuthorize 将所有内容重定向到 403 页面 是否可以配置此行为 我找到了这个 重定向策略 我该如何使用这个 最后我得到了它 使用 BjyAuthorize 版本 1
  • 使用App Script获取电子表格的所有查看者

    我编写了用于在应用程序脚本中获取电子表格的所有查看者的代码 我使用 getViewers 方法来获取实际观看它的观众姓名 但该方法正在返回我实际共享电子表格的人员的姓名 有没有其他方法可以让我获得电子表格的所有查看者 有没有网络自动化工具可
  • struts2 让我发疯

    I have been trying to make a java project Its using Struts 2 tags There is a button Update whenever it is to be clicked
  • ASP.NET Core 身份验证 cookie 仅收到一次

    我正在使用 ASP NET Core 开发一个应用程序 并且正在使用自定义 Cookie 身份验证 我的CookieAuthenticationOptions are app UseCookieAuthentication new Cook
  • 即使图像较小,如何使 UITableViewCell ImageView 具有固定大小

    我有一堆图像用于单元格的图像视图 它们都不大于 50x50 例如40x50 50x32 20x37 当我加载表格视图时 文本没有对齐 因为图像的宽度不同 另外 我希望小图像出现在中间而不是左侧 这是我在 cellForRowAtIndexP
  • 将asp.net图像添加到div

    有没有一种方法可以动态地将 Image1 添加到下面代码中的 while 循环 包含在 div 中 我的意思是实际上将 asp 图像添加到 div 中 通过代码 目前 当我看到代码时 它会查找一个 asp 图像 但我没有看到可以将其 添加
  • 带有 Excel 文件的 OPENROWSET

    我想执行简单的语句 SELECT FROM OPENROWSET MICROSOFT JET OLEDB 4 0 Text Database C Temp SELECT FROM test csv 今天早上我突然收到这条消息 Msg 730
  • 从 cron 运行时,顶部命令输出为空

    我试图使用以下命令每 5 分钟重定向特定文件中的 TOP 命令输出 top b n 1 gt var tmp TOP USAGE csv date I M p d m Y rw r r 1 root root 0 Dec 9 17 20 T
  • 使用 AspNet.Security.OpenIdConnect.Server 进行自定义生命周期验证 (ASP.NET vNext)

    我正在使用 Visual Studio 2015 Enterprise Update 1 和 ASP NET vNext rc1 update1 来颁发和使用 JWT 令牌 如下所述here 在我们的实现中 我们想要控制令牌生命周期验证 我
  • shell脚本中的“for i”和“for i in 1 2 3 4”有什么区别?

    我必须在不同的行上打印 shell 脚本中解析的所有参数 我写了一个脚本 for i in 1 2 3 4 5 do echo i done 但这打印 1 2 3 4 5 即使我将参数解析为 10 20 30 40 50 和互联网上的一个代
  • Javascript,数组成员的所有可能的总和(最多 4 个)

    我无法弄清楚如何编写一个函数来计算数组元素的所有可能总和 每次加法最多 4 个元素 Given x 1 32 921 9213 97 23 97 81 965 82 965 823 我需要从 1 32 965 823 to 1 32 921
  • 如何指定 Makefile 目标构建顺序而不放置任何物理依赖项?

    我一直在开发一个链接到 so 动态库 文件的 C 项目 假设我有一个目标PROG需要链接到a so 并且a so也是我构建的 在下面的Makefile中指定 PROG SRCS prog cpp PROG OBJS PROG SRCS cp