2013-04-23 5 views
5

Ich versuche, eine Bibliotheksdatei mit anderen Bibliotheksdateien zu kompilieren. Ich verwende die folgende Zeile in meinem Make-Datei gameobject.o zu erstellen:g ++: Schwerwiegender Fehler: kann nicht -o mit -c, -S oder -E mit mehreren Dateien angeben

lib/gameobject.o: src/gameobject.cpp src/vector.hpp lib/objectevent.o lib/sprite.o 
g++ $^ -c -o [email protected] $(SFML_FLAGS) 

Alle Abhängigkeiten comile richtig, aber ich bekomme die folgende Fehlermeldung, wenn er versucht gameobject.o zu kompilieren:

g++: fatal error: cannot specify -o with -c, -S or -E with multiple files 

Ich bin immer noch ein bisschen neu beim Erstellen von make/separating Compilation, also bin ich mir nicht sicher, was ich tun soll. Muss ich es nur kompilieren, ohne eine Ausgabe zu setzen? Muss ich gameobject.o kompilieren, ohne eine meiner anderen .o-Dateien zu verwenden? Wenn das stimmt, würde die Kompilierzeit für große Objekte ziemlich groß werden, wenn Sie keine Bibliotheken mit anderen Bibliotheken kompilieren können? Oder lese ich gerade diesen Fehler komplett falsch?

Antwort

8

Sie erstellen hier keine Bibliotheksdatei. Eine .o Datei ist eine Objektdatei. Normalerweise gibt es eine Objektdatei pro Quelldatei. Wenn Sie die -c Option des Compilers verwenden, benötigt es eine einzelne Quelldatei und kompiliert es in einer einzelnen Objektdatei. Sie können keine anderen Objektdateien zu einer vorhandenen Objektdatei hinzufügen, daher wird das Hinzufügen von .o und Dateien in dieselbe Compiler-Zeile mit -c nicht funktionieren.

Wenn Sie eine Bibliothek erstellen möchten, wäre das etwa libfoo.a (das "a" steht hier für "Archiv"). Wenn Sie eine ausführbare Datei erstellen möchten, können Sie dies auch tun.

Sie müssen sich genauer darüber im Klaren sein, welches Ergebnis Sie wollen, bevor wir beschreiben können, wie Sie es bekommen.

+0

Danke, das ist genau das, was ich wissen wollte. – user1539179

+0

Sie sollten dies wahrscheinlich als akzeptiert markieren – audiFanatic

Verwandte Themen