10

我正在尝试使用其他库文件编译库文件。我在 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/separating 编译还是有点陌生​​,所以我不太确定我应该做什么。我只需要编译它而不设置输出吗?我必须在不使用任何其他 .o 文件的情况下编译 gameobject.o 吗?如果这是真的,如果您不能使用其他库编译库,那么对于大型对象来说编译时间不会变得相当长吗?还是我只是完全错误地阅读了这个错误?

4

2 回答 2

13

您不是在此处构建库文件。文件.o是目标文件。通常每个源文件有一个目标文件。当您使用编译器的-c选项时,它采用单个源文件并将其编译为单个目标文件。您不能将其他目标文件添加到现有目标文件中,因此将.o.cpp文件添加到同一编译器行中-c是行不通的。

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

在我们描述如何得到它之前,你需要更清楚你想要什么结果。

于 2013-04-23T19:50:37.660 回答
1

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

于 2020-11-07T06:37:14.963 回答