Makefile 无缘无故删除目标文件

2024-02-08

这是 Makefile 代码:

CC=gcc 
CXX=g++ 
OBJS=OMXComponent.o Event.o hello_jpeg.o JPEG.o OMXCore.o Locker.o Logger.o
BIN=hello_jpeg.bin

# include ../Makefile.include


CFLAGS+=-DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi

LDFLAGS+=-L$(SDKSTAGE)/opt/vc/lib/ -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread -lrt -L../libs/ilclient -L../libs/vgfont

INCLUDES+=-I$(SDKSTAGE)/opt/vc/include/ -I$(SDKSTAGE)/opt/vc/include/interface/vcos/pthreads -I$(SDKSTAGE)/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont

all: $(BIN) $(LIB)

%.o: %.c
    @rm -f $@ 
    $(CC) $(CFLAGS) $(INCLUDES) -g -c $< -o $@ -Wno-deprecated-declarations

%.o: %.cpp
    @rm -f $@ 
    $(CXX) $(CFLAGS) $(INCLUDES) -g -c $< -o $@ -Wno-deprecated-declarations

%.bin: $(OBJS)
    $(CC) -o $@ -Wl,--whole-archive $(OBJS) $(LDFLAGS) -Wl,--no-whole-archive -rdynamic

我不知道为什么,但是当我调用我的 Makefile 时,它​​突然开始删除所有目标文件!之前不是删除的,但是最近运行Makefile后,是这样的 我在控制台窗口中得到的内容:

 rm OMXCore.o JPEG.o OMXComponent.o Logger.o hello_jpeg.o Locker.o Event.o

知道为什么它要删除我的目标文件吗?以及如何阻止Make删除它? 更奇怪的是,它昨天还没有删除,今天就开始了,我没有做任何升级或做任何更改! 现在,当我对其中一个 src 文件进行微小更改时,我必须等待很长时间才能再次重建所有其他目标文件,这是没有必要的,而且会减慢我的速度。

我确保我位于正确的目录中, 我什至给了“make”一个完整的路径,以防它选择不同的 Makefile

make -f /my_full_path/Makefile

当 Makefile 运行时,我在另一个终端中执行“ls”,我注意到我正确地累积了目标文件,如下所示:

-rw-rw-r-- 1 pi pi   1170 Mar  3 19:28 Makefile
-rw-r--r-- 1 pi pi 482052 Mar  3 19:30 OMXComponent.o
-rw-r--r-- 1 pi pi  19984 Mar  3 19:30 Event.o
-rw-r--r-- 1 pi pi  14688 Mar  3 19:30 hello_jpeg.o
-rw-r--r-- 1 pi pi 162260 Mar  3 19:31 JPEG.o
-rw-r--r-- 1 pi pi 215492 Mar  3 19:31 OMXCore.o
-rw-r--r-- 1 pi pi  76384 Mar  3 19:31 Locker.o
-rw-r--r-- 1 pi pi      0 Mar  3 19:31 Logger.o

但突然间,在一切构建完成后,所有目标文件都被删除了!

并且,这是 Makefile 命令的输出:

pi@raspberrypi /opt/vc/src/hello_pi/hello_jpeg_v2 $ make -f /opt/vc/src/hello_pi/hello_jpeg_v2/Makefile 
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c OMXComponent.cpp -o OMXComponent.o -Wno-deprecated-declarations
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c Event.cpp -o Event.o -Wno-deprecated-declarations
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c hello_jpeg.cpp -o hello_jpeg.o -Wno-deprecated-declarations
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c JPEG.cpp -o JPEG.o -Wno-deprecated-declarations
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c OMXCore.cpp -o OMXCore.o -Wno-deprecated-declarations
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c Locker.cpp -o Locker.o -Wno-deprecated-declarations
g++ -g -DSTANDALONE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -D_LINUX -fPIC -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -Wall -g -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -ftree-vectorize -pipe -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi -I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I./ -I../libs/ilclient -I../libs/vgfont -g -c Logger.cpp -o Logger.o -Wno-deprecated-declarations
g++ -g -o hello_jpeg.bin -Wl,--whole-archive OMXComponent.o Event.o hello_jpeg.o JPEG.o OMXCore.o Locker.o Logger.o -L/opt/vc/lib/ -lGLESv2 -lEGL -lopenmaxil -lbcm_host -lvcos -lvchiq_arm -lpthread -lrt -L../libs/ilclient -L../libs/vgfont -Wl,--no-whole-archive -rdynamic
rm OMXCore.o JPEG.o OMXComponent.o Logger.o hello_jpeg.o Locker.o Event.o

这些文件正在被删除,因为make认为它们是“中间”。什么时候make形成一个规则链来产生先决条件,它将中间链创建的所有文件视为“中间”,并在创建目标时将其删除。看链式规则 http://www.gnu.org/software/make/manual/html_node/Chained-Rules.html在 GNU make 手册中。

对于您的情况,您可以通过两种方式来防止这种情况:%.bin规则,无论如何这似乎是错误的,因为它说all .bin文件依赖于固定的目标文件列表,并将其替换为

$(BIN): $(OBJS)
        # as before

或将目标文件标记为“次要”:

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

Makefile 无缘无故删除目标文件 的相关文章

  • 使用 OpenMP 编译会导致内存泄漏

    根据 valgrind 的说法 使用 OpenMP 编译简单的 hello world 程序时可能会导致内存泄漏 这是没有意义的 因为 hello world 程序并没有有意使用任何 OpenMP 功能 假设下面的程序名为hi c并根据 g
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • Makefile 和通配符

    好吧 这是我当前的 makefile 设置 有一些文件名为public01 c public02 c等等 我正在尝试使用以下方法为每个人制作目标文件public o带有通配符的标签 public o public c hashtable h
  • 错误:“std::this_thread”尚未声明

    我尝试使用 std this thread sleep for 函数但收到错误 error std this thread has not been declared 包括标志 GLIBCXX USE NANOSLEEP 还需要什么来强制它
  • gcc 不太可能使用宏

    我正在编写一段关键代码 其逻辑大致如下 if expression is true do something with extremely low latency before the nuke blows up This branch i
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • Gcc 4.2 版本缺失

    在我的带有 osx lion 和 XCode 4 1 的新 macbook pro 上 我遇到了一些 gcc 问题 In usr bin我找不到gcc 4 2 我只有以下版本 i686 apple darwin11 llvm gcc 4 2
  • 我怎样才能强制Make一直执行一个菜谱

    当前的 Makefile 有这样的内容 target1 lib1 a lib2 a target2 lib1 a lib3 a target3 lib3 a lib1 a MAKE C sub dir all 我想更改此 Makefile
  • 使用 g++ 从 cpp 文件和静态库创建共享库 [重复]

    这个问题在这里已经有答案了 就像标题所说 我想从三个 cpp 文件和一些静态库创建共享库 基本上我想这样做 g libProject so file1 cpp file2 cpp file3 cpp I usr local include
  • 如何将输入传递到扩展汇编中?

    考虑这段代码 来自我的先前的问题 https stackoverflow com questions 37955538 segfault on movq instruction int main asm movq 100000000 rcx
  • makefile 目标中可以有多个 % 符号吗?

    所以我有一个具有如下目标依赖项的 makefile all foreach lang LANGS foreach models MODELS targetName model xml lang targetName 目标如下所示 targe
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 为什么总是./configure;制作;进行安装;作为 3 个单独的步骤?

    每次从源代码编译某些内容时 都会经历相同的 3 个步骤 configure make make install 我明白 将安装过程分为不同的步骤是有意义的 但我不明白 为什么这个星球上的每个编码员都必须一次又一次地编写相同的三个命令才能完成
  • ELF动态符号表

    我有一个关于 ELF 动态符号表的问题 对于 FUNC 类型的符号 我注意到某些二进制文件中的值为 0 但在其他二进制文件中 它具有一些非零值 这两个二进制文件都是由 gcc 生成的 我想知道为什么会出现这种差异 有没有编译器选项来控制这个
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 具有两个同名目标的 Makefile

    我有一个包含包含语句的 makefile 我无法控制包含的 makefile 的内容 不过 我希望能够在 某些 不是全部 目标之前添加一些预处理步骤 考虑以下示例 install echo install target include ot
  • 在GCC中添加父目录的包含路径

    我想将父目录中的文件包含在我正在处理的项目中 所有的头文件都在父目录中 有没有办法在命令行上使用 I 来搜索父目录中的包含而不使用绝对路径 我知道我可以使用 makefile 解决这些问题 并且我可能最终会这样做 但我想知道是否有一个可以使
  • 无法链接 Boost 正则表达式

    我目前正在尝试编译一个KIT 的收缩层次实现 http algo2 iti kit edu english routeplanning php这需要 Boost Regex 提供的 Makefile 已经确保 并且我还手动仔细检查了这一点
  • 要求编译器发出无分支/恒定时间代码

    在密码学中 任何依赖于秘密数据 例如私钥 的代码都必须在恒定时间内执行 以避免侧信道定时攻击 https en wikipedia org wiki Timing attack 目前最流行的架构 x86 64 和 ARM AArch64 都

随机推荐

  • 如何在 libgdx 中沿 x 轴旋转图像?

    我试图在其 x 轴上旋转图像 但它不起作用 Texture one new Texture Gdx files internal img one jpg oneImg new Image one oneImg setOrigin oneIm
  • iOS 11.2.1 Xcode 9.2 BoringSSL SSL_ERROR_ZERO_RETURN(6)

    我在有 WKWebView 显示页面的项目中突然遇到此错误 该页面像以前一样加载良好 但现在当我尝试从该页面导航到另一个页面时 我收到此错误 BoringSSL Function boringssl session errorlog lin
  • primefaces:对话框不显示

    我的问题是p dialog没有显示 监听器被解雇 没有错误消息 我的要求是 当我选择一行时 该行的详细信息必须显示在对话框中 请帮助我 提前致谢
  • 在 Pandas 中将两个 MultiIndex 级别合并为一个

    我有一个多索引的 Pandas 数据框 第二级包含年份 2014 2015 第三级包含月份编号 1 2 12 我想将这两个合并为一个级别 例如 1 2014 2 2014 6 2015 这怎么可能做到呢 我是熊猫新手 搜索了很多但找不到任何
  • X 天内从 http 页面调用时,FB.api 方法将停止工作。请更新您的网站以使用 https 进行 Facebook 登录

    我正在本地主机中开发一个应用程序 突然收到此错误 X 天内从 http 页面调用时 FB api 方法将停止工作 请更新您的网站以使用 https 进行 Facebook 登录 时间用完后我还能在本地主机上开发吗 根据 Facebook 公
  • 将 MeiYan 哈希函数移植到 Go

    我想将最先进的哈希函数 MeiYan 从 C 移植到 Go 据我所知 就速度和冲突率而言 这即使不是哈希表的最佳哈希函数 也是最好的哈希函数之一 它至少击败了 MurMur 我是 Go 新手 刚花了一个周末 想出了这个版本 func mei
  • Solidity:ParserError:预期的编译指示、导入指令或合约/接口/库定义

    当我编写简单合约时 我也遇到了最新的 solc 0 5 2 版本 和 0 4 25 的错误 我尝试过以下步骤 已卸载的 Solc npm uninstall solc 安装的目标版本 npm install save 电子邮件受保护 cdn
  • 使用 dapper,为什么在一次使用连接中创建的临时表在第二次使用同一连接时不可用

    我正在尝试使用 C 中的 dapper 执行一系列 SQL Server 步骤 第一步创建一个临时表并填充它 以下步骤从临时表中查询数据 创建 填充似乎运行成功 但临时表中的第一个查询失败 并显示 对象名称 GetPageOfGlobalU
  • 验证隐藏字段

    我正在使用 MVC3 进行不引人注目的验证 我有一个字段 用户需要填写一些数据 然后按 搜索 按钮 如果从未按下搜索或用户在按下搜索后更改了输入字段 则不应提交表单 我添加了一个隐藏字段 设置为true by the click 按钮的事件
  • 在 shell 脚本中获取 2 个数组中的公共值[重复]

    这个问题在这里已经有答案了 我有一个 array1 20 30 40 50 array2 10 20 30 80 100 110 40 我必须从数组 3 中的这两个数组中获取共同值 如下所示 array3 20 30 40 按升序排列 Sh
  • Facebook PHP SDK Graph API 发布到页面无法正常运行

    我正在尝试向我的应用程序添加一项功能 该功能会将状态发布到管理员用户的页面时间线 其详细信息与他们在 Facebook com 上发布的内容相同 我关注的主要功能是链接共享和缩略图 例如当您将链接粘贴到状态中时 它会自动检测缩略图 为您提供
  • HttpServletRequest 和 getHeader():如何正确处理不区分大小写的标头?

    由于我发现根据 RFC HTTP 标头不区分大小写 因此我想知道如何使用 Servlet 以不区分大小写的方式访问 HTTP 标头 有一个 getHeader String 方法来获取标头 但事实证明该方法对标头字段区分大小写 是否有一种
  • 获取UIScrollView的当前位置

    我来自 Android 但在 IOS 上我感到很头疼 我需要制作一个像电影片尾字幕一样的滚动菜单 我使用了下面的代码 rol scroll view contentOffset y timer NSTimer scheduledTimerW
  • 在 Web 浏览器控件中捕获 Javascript 警报

    使用网络浏览器控件浏览站点 有时会出现涉及 javascript 弹出框的错误 当这种情况发生时 我想做一些事情 了解 JavaScript 警报何时弹出 我使用 LostFocus 事件取得了一些成功 但每当它失去焦点时 代码都会运行 这
  • Swift 将多个类分配给 UI 元素

    是否可以将多个自定义类分配给 Swift 中的同一个 UI 元素 我有一个 UITextField 我需要使用 Spring 动画库 对其进行动画处理 并且我还需要在同一个 UITextField 上使用一些其他库来提供一些其他功能 我通常
  • 用于(合法)欺骗 SMS 消息的 SMS 网关

    我正在寻找一个 SMS 网关来通过 HTTP 接口发送短信 但有些短信网关不允许设置发件人ID 允许设置的短信网关要么要求用户证明发件人ID是自己的手机号码 要么手动检查每个发件人ID 以防止出现问题 短信欺骗 http en wikipe
  • 是否可以在Unity的HDRP中创建DepthMask效果?

    我已经为此努力了一段时间 但我不知道是否有可能创建一个深度掩模着色器HDRP 如此处所述 http wiki unity3d com index php DepthMask 对于我的确切用途 我试图在应用了材质的任何形状上创建一个 洞 以显
  • 无法在 Flutter 上找到捆绑的 Java 版本

    I have Android Studio version 3 0 当我使用命令时flutter doctor它向我显示以下内容 无法找到捆绑的 Java 版本 我当前的Java版本是 build 1 8 0 131 b11 在 Windo
  • 设置/更改更改 Android 中的 WebView 用户代理

    我有一个网站 应该只在我的应用程序中使用 WebView 否则我的网站会将用户重定向到可以下载我的应用程序的页面 那么 如何在WebView中更改这个UA呢 另外 由此可能出现哪些问题 您可以使用setUserAgent https dev
  • Makefile 无缘无故删除目标文件

    这是 Makefile 代码 CC gcc CXX g OBJS OMXComponent o Event o hello jpeg o JPEG o OMXCore o Locker o Logger o BIN hello jpeg b