g ++:致命错误:无法使用多个文件指定-o和-c,-S或-E

时间:2013-04-23 19:39:41

标签: compilation g++ makefile

我正在尝试使用其他库文件编译库文件。我在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?如果这是真的,如果您无法使用其他库编译库,那么对于大型对象,编译时间是否会变得非常大?或者我只是完全错误地阅读了这个错误?

2 个答案:

答案 0 :(得分:10)

您没有在此处构建库文件。 .o文件是目标文件。通常,每个源文件都有一个目标文件。使用编译器的-c选项时,它会获取单个源文件并将其编译为单个目标文件。您无法将其他对象文件添加到现有对象文件中,因此将.o.cpp文件添加到具有-c的同一编译器行中是行不通的。

如果你想创建一个库,那就像libfoo.a(这里的“a”代表“存档”)。如果你想创建一个可执行文件,你也可以这样做。

在我们描述如何获得结果之前,您需要更清楚地了解您想要的结果。

答案 1 :(得分:0)

将解决方案的某些项目组合到一个项目后,我遇到了同样的问题。我发现有两个同名的.cpp文件,在我将其中一个重命名后,它解决了。