我正在尝试使用其他库文件编译库文件。我在makefile中使用以下行来创建gameobject.o:
lib/gameobject.o: src/gameobject.cpp src/vector.hpp lib/objectevent.o lib/sprite.o
g++ $^ -c -o $@ $(SFML_FLAGS)
所有依赖项都正确编译,但在尝试编译gameobject.o时出现以下错误:
g++: fatal error: cannot specify -o with -c, -S or -E with multiple files
我使用make / separation编译还是有点新,所以我不太清楚应该做什么。我是否只需编译它而不设置输出?我是否必须在不使用任何其他.o文件的情况下编译gameobject.o?如果这是真的,如果您无法使用其他库编译库,那么对于大型对象,编译时间是否会变得非常大?或者我只是完全错误地阅读了这个错误?
答案 0 :(得分:10)
您没有在此处构建库文件。 .o
文件是目标文件。通常,每个源文件都有一个目标文件。使用编译器的-c
选项时,它会获取单个源文件并将其编译为单个目标文件。您无法将其他对象文件添加到现有对象文件中,因此将.o
和.cpp
文件添加到具有-c
的同一编译器行中是行不通的。
如果你想创建一个库,那就像libfoo.a
(这里的“a”代表“存档”)。如果你想创建一个可执行文件,你也可以这样做。
在我们描述如何获得结果之前,您需要更清楚地了解您想要的结果。
答案 1 :(得分:0)
将解决方案的某些项目组合到一个项目后,我遇到了同样的问题。我发现有两个同名的.cpp文件,在我将其中一个重命名后,它解决了。