为什么 make 抱怨循环依赖?

2023-11-25

我已经为我的项目构建了一个 make 文件,它可以工作(一切都可以编译),但它给出了这些令人恼火的错误消息:

make: Circular zpr.c <- zpr.o dependency dropped.
gcc -Wall   -c -o zpr.o zpr.c
make: Circular readjpeg.c <- readjpeg.o dependency dropped.
gcc -Wall   -c -o readjpeg.o readjpeg.c
make: Circular readppm.c <- readppm.o dependency dropped.
gcc -Wall   -c -o readppm.o readppm.c
make: Circular SceneNode.cpp <- SceneNode.o dependency dropped.
g++    -c -o SceneNode.o SceneNode.cpp
make: Circular BoundingBoxNode.cpp <- BoundingBoxNode.o dependency dropped.
g++    -c -o BoundingBoxNode.o BoundingBoxNode.cpp
make: Circular GeometryNode.cpp <- GeometryNode.o dependency dropped.
g++    -c -o GeometryNode.o GeometryNode.cpp
make: Circular SceneGraph.cpp <- SceneGraph.o dependency dropped.
g++    -c -o SceneGraph.o SceneGraph.cpp
make: Circular testgraph.cpp <- testgraph.o dependency dropped.
g++    -c -o testgraph.o testgraph.cpp

我的 makefile 一点也不复杂,所以希望有人能发现错误。

GXX=g++
CC=gcc
CFLAGS=-Wall

LIBS=-lGL -lglut -ljpeg

OBJS=helpers.o loadobj.o zpr.o readjpeg.o readppm.o SceneNode.o BoundingBoxNode.o GeometryNode.o SceneGraph.o  testgraph.o
OBJS2=testgraph.o SceneGraph.o GeometryNode.o BoundingBox.o SceneNode.o readppm.o readjpeg.o zpr.o loadobj.o helpers.o
SRCS=testgraph.cpp SceneGraph.cpp SceneNode.cpp

.o.cpp:
    $(GXX) $(CFLAGS) -c $<

.o.c:
    $(CC) $(CFLAGS) -c $<

testgraph: $(OBJS)
    $(GXX) $(LIBS) $(OBJS) -o testgraph

clean:
    rm *.o

你的隐含规则是罪魁祸首。它们的扩展名按照与 make 理解的顺序相反的顺序列出。

.o.c:

告诉 make .c 文件是从 .o 文件创建的。由于已经有一条规则规定 .o 文件是从 .c 文件创建的,因此存在循环依赖关系,因此会出现错误。

解决方案是(或者应该是,假设合理配置的 make)很简单。

在真正常见的情况下(例如 C++ 源代码),您(通常)不需要指定自己的编译规则。只需指定类似以下内容会更简单:

CFLAGS=-Wall
LOADLIBES=-lGL -lglut -ljpeg

OBJS=helpers.o loadobj.o zpr.o readjpeg.o readppm.o SceneNode.o \
   BoundingBoxNode.o GeometryNode.o SceneGraph.o  testgraph.o 

all: testgraph

testgraph: $(OBJS)

这可能还可以帮助您避免两个错误。

  1. 您编写的规则表明 .o 文件是从 .c 文件创建的,这是向后的。但正确的规则已经存在于几乎所有版本的 make 中。

  2. 您已在目标文件之前列出了库。这在某些使用 ELF 格式对象的平台上是偶然发生的。但这仍然是错误的。在对象之后列出库,因为库只是为了满足未定义的外部而加载。

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

为什么 make 抱怨循环依赖? 的相关文章

  • bash 函数保留制表符补全

    我把函数 make color make 1 ccze A in bashrc获得彩色的 make 输出 他的作品很好 但是make用于选择目标的制表符补全功能丢失 有什么方法可以保留函数中命令的制表符完成 或者我可以做其他事情来实现制表符
  • 从 Makefile 中的 C++FLAGS 中删除一个标志?

    我有一个 Makefile 其中包含另一个设置了很多默认值的 makefile 我无法编辑包含的 makefile 并且我想更改 makefile 中 C FLAGS 的值 即使它是在包含的 makefile 中设置的 具体来说 每当 de
  • 用于发布和调试目标的 Makefile

    我正在尝试构建一个 Makefile 它可以通过指定目标而不是变量 例如make debug 1 不太好 我这里有一个精简的简化示例 它模拟了我想要实现的目标 ifdef debug BINARY my binary debug MODUL
  • 将环境变量从 Makefile 导出到用户态环境

    我正在研究如何从 Makefile 环境变量导出以在用户环境中公开 因此应该可以从用户 shell 访问从 Makefile 导出这些变量 我努力了make s export https www gnu org software make
  • 为什么总是./configure;制作;进行安装;作为 3 个单独的步骤?

    每次从源代码编译某些内容时 都会经历相同的 3 个步骤 configure make make install 我明白 将安装过程分为不同的步骤是有意义的 但我不明白 为什么这个星球上的每个编码员都必须一次又一次地编写相同的三个命令才能完成
  • Makefile:对子目录中的所有文件进行操作?

    我正在使用 Makefile 和 GNU make 基于源 Markdown 文件创建各种文档输出目标 这包括使用latex or pdflatex创建 DVI 文件 使用 EPS 或 PS 格式以外的图像会导致错误 我可以在源 Markd
  • 具有两个同名目标的 Makefile

    我有一个包含包含语句的 makefile 我无法控制包含的 makefile 的内容 不过 我希望能够在 某些 不是全部 目标之前添加一些预处理步骤 考虑以下示例 install echo install target include ot
  • 安装 libjpeg v8 到 /opt/local

    如何在 OSX 上将 libjpeg 8 安装到 opt local 我问的原因是我想用以下方法制作大脑活动的小电影MNE C 库 http www nmr mgh harvard edu martinos userInfo data MN
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 在许多驱动程序文件夹中创建 build-in.o

    我正在用我的自定义驱动程序构建内核 成功构建后 我发现了许多 build in o 文件 任何人都可以详细说明这些文件是如何在这里结束的吗 我只能怀疑这些与更高级别的 makefile 有关 built in o 文件是未构建为模块的内核的
  • 如何确保目标在 makefile 中的所有其他构建规则之前运行?

    我有一个 C 项目 其中包含所有其他 C 文件所依赖的生成文件 我试图在任何其他编译开始之前强制生成并编译该文件 通常它就像将该文件首先放入all 目标 但复杂的是我的 Makefile 也是由构建系统生成的 我只能将片段附加到 Makef
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

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

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • Makefile:没有规则来制作目标

    我正在关注本指南makefile http www cs colby edu maxwell courses tutorials maketutor 但我根本不理解最后一个例子 并且我无法让我的 makefile 工作 因为我收到了错误ma
  • 您如何使编译器行更短?

    通常 当我与其他人一起处理一个项目时 随着时间的推移 编译器在 Makefile 中获取的库路径和包含路径的数量会变得越来越多 此外 路径也可能会变得很长 这是一个例子 g c pipe O2 Wall W DQT BOOTSTRAPPED
  • Windows 上 gnu make 的 libintl3 和 libiconv2 在哪里,需要在 MinGW 上用 ruby​​ 编译 vim

    我正在尝试为 Windows 运行 gnu make 但它无法运行 因为libint3 dll没找到 果然 http gnuwin32 sourceforge net packages make htm http gnuwin32 sour
  • 是否可以在 Mac OS X 上构建 FreeGLUT?

    我正在做一些关于 OpenGL 的教程 http www arcsynthesis org gltut Basics Tutorial 2001 html那个使用FreeGLUT http freeglut sourceforge net
  • 找不到包“gdk-pixbuf-2.0”

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

随机推荐

  • 元素不会保持居中,尤其是在调整屏幕大小时

    我的问题是我无法水平居中三角形指针 好吧 对于某些窗口大小 我可以将指针居中 但是当我缩小或扩展窗口时 它会再次将其放置在错误的位置 我缺少什么 body background 333333 container width 98 heigh
  • 如何从 Symfony2 config.yml 读取配置设置?

    我在 config yml 文件中添加了一个设置 如下所示 app config contact email email protected 对于我的一生 我不知道如何将其读入变量 我在我的一个控制器中尝试了类似的操作 recipient
  • 元素之间的间距

    我是 CSS 和 HTML 的完全初学者 我正在构建我的第一个基本培训页面 我现在想做的是在两个元素之间留出间距而不使用 br 目前我正在使用这个 formClear clear left height 25px 它适用于间距 但你这是正确
  • 更多 Pythonic/Pandaic 方法来循环 pandas 系列

    这很可能是非常基本的东西 但我无法弄清楚 假设我有一个这样的系列 s1 pd Series 1 1 1 2 2 2 3 3 3 4 4 4 如何在无需恢复使用 for 循环的情况下对该系列的子系列进行操作 例如 假设我想将其变成一个包含四个
  • 使用 papa parse 解析大型 csv 文件

    我正在尝试加载一个大约 100k 行的文件 到目前为止浏览器已经崩溃 本地 我上网查了一下 发现 Papa Parse 似乎可以处理大文件 现在加载到文本区域的时间减少到大约 3 4 分钟 加载文件后 我想要执行更多 jQuery 来执行计
  • 从 javascript 重定向到操作

    我有一个 MVC4 项目 在客户端我需要重定向到特定的操作方法 我已阅读以下帖子如何从 JavaScript 方法重定向到操作 下面有一条关于使用的评论 window location href controller action para
  • 使 SVG 路径像一条平滑的线,而不是参差不齐

    那么在我创建的项目中河流线 from pathes 并且由于我的这种大笔划宽度这个很ragged 我已经四处寻找了 但我唯一发现的是stroke linejoin round 正如你在这里看到的 好多了 但我仍然不满意 有什么办法可以得到一
  • 为什么虚函数需要通过指针传递而不是通过(对象的)值传递?

    我想我理解虚拟方法和虚表的概念 但我不明白为什么将对象作为指针 或引用 传递和按值传递 哪种废弃虚表或其他东西 为什么这样的事情会起作用 Material m new Texture poly gt setMaterial m method
  • 不知道如何使用 PDFBox

    我正在尝试创建一个 PDF 文件 其中包含文档中的大量文本框和来自另一个类的文本字段 我正在使用 PDFBox 好的 创建一个新文件很容易 编写一行文本也很容易 现在 当我尝试插入下一个文本行或文本字段时 它会覆盖内容 PDDocument
  • 如何在类的头文件中定义 const double?

    在我的类的头文件中 我正在尝试以下操作并收到编译器投诉 private static const double some double 1 0 你应该如何实际做到这一点 在 C 11 中 您可以使用非整数常量表达式 这要归功于constex
  • C# 读取另一个进程内存

    我在从游戏中读取简单的 int 时遇到问题 我用 Cheat Engine 找到了一个静态地址 如果我手动将其插入列表中 它每次都会起作用 但是当我尝试用 C 读取它时 它总是读取 0 字节 如果有人可以提供帮助 那就太好了 Thanks
  • AlertDialog - 当用户点击“确定”时如何运行检查

    对于自定义 AlertDialog 我可以覆盖肯定按钮以不关闭对话框吗 相反 我想运行一些编辑检查 并在检查失败时保持对话框打开 protected Dialog onCreateDialog int id Dialog alertDial
  • Spring - 找不到 WebApplicationContext:没有注册 ContextLoaderListener? [复制]

    这个问题在这里已经有答案了 我在尝试运行 Spring 项目时收到以下错误 HTTP Status 500 java lang IllegalStateException No WebApplicationContext found no
  • 将所需的行移动到 pandas Dataframe 的顶部

    In pandas 如何在不创建数据框副本的情况下将行复制或移动到数据框顶部 例如 我设法用下面的代码几乎完成了我想要的事情 但我的印象是可能有更好的方法来完成此任务 import pandas as pd df pd DataFrame
  • 为什么我不能从方法中抛出异常

    我是 Java 新手 在抛出异常方面遇到了一些问题 也就是说 为什么这是不正确的 public static void divide double x double y if y 0 throw new Exception Cannot d
  • 如何将 Abaqus python 库集成到 PyCharm 中托管的项目中

    有一个类似的question关于将 Abaqus 特定的 Python 库集成到托管的项目中PyDev Eclipse 但不幸的是 答案与我手头的问题不兼容 我在用ABAQUS版本 6 11 2 和社区版PyCharm 3 1 3 Abaq
  • 使用 pdb 文件进行调试时,VS2017 阻止不存在的目标文件

    我们正在将 Visual C 项目切换到 vc141 工具链 VS 2017 我们遇到了 Visual Studio 无法使用 pdb文件的来源 obj文件不再存在 例如 因为它们已在构建服务器上编译 让我们看一个非常简单的可执行项目 in
  • C++ 中的 const char*

    C 中的字符串表达式如何工作 考虑 include
  • Python json.loads 失败,并显示“ValueError:无效控制字符:第 1 行第 33 列(字符 33)”

    我有一个像这样的字符串 s u desc u73cd u54c1 u7f51 u5168 u7403 u6f6e u6d41 u5962 u54c1 u7f51 u7edc u96f6 u552e u5546 br r nhttp www
  • 为什么 make 抱怨循环依赖?

    我已经为我的项目构建了一个 make 文件 它可以工作 一切都可以编译 但它给出了这些令人恼火的错误消息 make Circular zpr c lt zpr o dependency dropped gcc Wall c o zpr o