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 循环依赖被删除的主要内容,如果未能解决你的问题,请参考以下文章