C++ 出错:“;g++;:错误:bin/main.o:没有这样的文件或目录”;

C++ 出错:“;g++;:错误:bin/main.o:没有这样的文件或目录”;,c++,makefile,C++,Makefile,我正在尝试编译我编写的一个程序,目录的结构如下: ctrace > bin, include, src, makefile bin> include > Agent.h, Graph.h, Session.h, Tree.h src> Agent.cpp, ContactTracer.cpp, Graph.cpp, main.cpp, Session.cpp, Tree.cpp, Virus.cpp g++: error: bin/main.o: No such fil

我正在尝试编译我编写的一个程序,目录的结构如下:

ctrace > bin, include, src, makefile
bin>
include > Agent.h, Graph.h, Session.h, Tree.h
src> Agent.cpp, ContactTracer.cpp, Graph.cpp, main.cpp, Session.cpp, Tree.cpp, Virus.cpp
g++: error: bin/main.o: No such file or directory
Makefile:5: recipe for target 'cTrace' failed
make: *** [cTrace] Error 1
我得到的错误如下:

ctrace > bin, include, src, makefile
bin>
include > Agent.h, Graph.h, Session.h, Tree.h
src> Agent.cpp, ContactTracer.cpp, Graph.cpp, main.cpp, Session.cpp, Tree.cpp, Virus.cpp
g++: error: bin/main.o: No such file or directory
Makefile:5: recipe for target 'cTrace' failed
make: *** [cTrace] Error 1
这是我的制作文件:

# All Targets
all: cTrace

cTrace: bin/Session.o bin/Agent.o bin/Graph.o bin/Tree.o bin/Virus.o bin/ContactTracer.o
    @echo 'Building target: cTrace'
    g++ bin/Session.o bin/Agent.o bin/Graph.o bin/Tree.o bin/Virus.o bin/ContactTracer.o bin/main.o -o cTrace
    @echo 'target cTrace built successfully'

bin/main.o: src/main.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude -o bin/main.o src/main.cpp 

bin/Session.o: src/Session.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude -o bin/Session.o src/Session.cpp 

bin/Agent.o: src/Agent.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude src/Agent.cpp -o bin/Agent.o

bin/Graph.o: src/Graph.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude src/Graph.cpp -o bin/Graph.o

bin/Tree.o: src/Tree.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude src/Tree.cpp -o bin/Tree.o

bin/Virus.o: src/Virus.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude src/Virus.cpp -o bin/Virus.o

bin/ContactTracer.o: src/ContactTracer.cpp
    g++ -g -Wall -Weffc++ -std=c++11 -c -Iinclude src/ContactTracer.cpp -o bin/ContactTracer.o

clean:
    rm -rf bin/*.o cTrace
可能是什么问题?所有目录都存在,我猜main.o从未生成,但我不明白为什么,因为我没有完全理解makefile中的所有标志。任何关于如何编写更好的makefile的提示都将不胜感激。 另一方面,我能够使用CLion生成的CMake运行完全相同的项目


提前感谢。

问题似乎是
bin/main.o
应该作为
cTrace

cTrace: bin/Session.o bin/Agent.o bin/Graph.o bin/Tree.o bin/Virus.o bin/ContactTracer.o bin/main.o

目前,构建cTrace不会导致make文件尝试构建bin/main.o,因此您会得到一个关于缺少文件的错误。

您缺少bin/main.o作为cTrace目标的依赖项。这就是为什么make不编译它,并且结果对象文件丢失的原因。只需将bin/main.o添加到第4行的依赖项列表中。

谢谢,您一定错过了。不管怎样,有没有更好的方法来编写这样的makefile?使用宏?宏、模式规则和自动变量将消除在两个位置具有相同文件列表的需要,这是问题的原始原因。例如,这里有一个很好的介绍: