【问题标题】:Makefile circular dependency droppedMakefile 循环依赖被删除
【发布时间】: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 文件。请高人指正。

【问题讨论】:

    标签: c++ linux makefile


    【解决方案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 实际上不是我回答了这个问题。最好的学习方法是阅读文档,而不是在 StackOverflow 上询问。 Beta 使用的形式称为静态模式规则。 GNU make 手册中描述它们的部分是gnu.org/software/make/manual/html_node/Static-Pattern.html
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多