Makefile 循环依赖被删除

Posted

技术标签:

【中文标题】Makefile 循环依赖被删除【英文标题】:Makefile circular dependency dropped 【发布时间】:2014-01-24 04:50:58 【问题描述】:

我正在尝试为我的项目创建一个 makefile,但在运行它时出现错误 喜欢:

make: Circular database.cpp <- database.cpp dependency dropped

make: database.cpp' is up to date.

这是我的 Makefile:

HEADERFILES = $(wildcard *.h)
CPPFILES = $(wildcard *.cpp)
OBJFILES = $(patsubst %.cpp ,%.o ,$(wildcard *.cpp))
$(OBJFILES): $(CPPFILES) $(HEADERFILES)
    g++ -c -o $(OBJFILES) $(CPPFILES)
    ar rvs libdatabase.a $(OBJFILES) 

我只有一个.cpp.h 文件。请高人指正。

【问题讨论】:

【参考方案1】:

您的patsubst 中有一个额外的空间,这会阻止正确匹配,因此OBJFILES 是“database.cpp”。您可以像这样更正它:

OBJFILES = $(patsubst %.cpp,%.o ,$(wildcard *.cpp))

但是,当您将第二个源文件添加到代码库时,这仍然会给您留下一个会严重失败的 makefile。我建议你这样做:

$(OBJFILES): %.o : %.cpp $(HEADERFILES)
    g++ -c -o $@ $<
    ar rvs libdatabase.a $@

【讨论】:

@MadScientist 实际上你修改了我的命令 $(CPPFILES) -> %.o : %.cpp %.o:%.cpp 是什么意思你能解释一下 % 会做什么 Beta 实际上不是我回答了这个问题。最好的学习方法是阅读文档,而不是在 *** 上询问。 Beta 使用的形式称为静态模式规则。 GNU make 手册中描述它们的部分是gnu.org/software/make/manual/html_node/Static-Pattern.html

以上是关于Makefile 循环依赖被删除的主要内容,如果未能解决你的问题,请参考以下文章

依赖树中的 Makefile 循环

将具有循环链接依赖的makefile转换为CMake

通过将同一个库链接两次来解决循环依赖关系?

Spring如何解决循环依赖?

为啥无状态 bean 被视为伪作用域并且不能具有循环依赖关系?

C++模板函数导致循环依赖