2013-04-23 12 views
5

Próbuję skompilować plik biblioteki przy użyciu innych plików biblioteki. Używam następujący wiersz w moim makefile stworzyć gameobject.o:g ++: błąd krytyczny: nie można podać -o z opcją -c, -S lub -E z wieloma plikami

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

wszystkie zależności comile prawidłowo, ale pojawia się następujący komunikat o błędzie podczas próby skompilować gameobject.o:

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

Wciąż używam kompilacji make/separating, więc nie jestem do końca pewien, co powinienem zrobić. Czy muszę go skompilować bez ustawiania wyjścia? Czy muszę skompilować gameobject.o bez używania żadnego z moich innych plików .o? Jeśli to prawda, czy czasy kompilacji nie byłyby duże w przypadku dużych obiektów, jeśli nie można skompilować bibliotek z innymi bibliotekami? Czy po prostu ten błąd jest całkowicie błędny?

Odpowiedz

8

Nie budujesz tutaj pliku biblioteki. Plik .o jest plikiem obiektowym. Zazwyczaj istnieje jeden plik obiektowy na plik źródłowy. Kiedy używasz opcji kompilatora -c, pobiera pojedynczy plik źródłowy i kompiluje go do pliku pojedynczego obiektu. Nie można dodawać innych plików obiektów do istniejącego pliku obiektu, więc dodanie zarówno plików .o, jak i .cpp do tej samej linii kompilatora z -c nie będzie działało.

Jeśli chcesz utworzyć bibliotekę, będzie to coś w rodzaju libfoo.a ("a" tutaj oznacza "archiwum"). Jeśli chcesz utworzyć plik wykonywalny, możesz to zrobić również.

Musisz dokładnie określić, jaki wynik chcesz, zanim będziemy mogli opisać, jak go uzyskać.

+0

Dzięki, to jest dokładnie to, co chciałem wiedzieć. – user1539179

+0

Powinieneś oznaczyć to jako zaakceptowane – audiFanatic

Powiązane problemy