2013-04-23 6 views
5

Sto tentando di compilare un file di libreria utilizzando altri file di libreria. Sto usando la seguente riga nel mio makefile per creare gameobject.o:g ++: errore irreversibile: impossibile specificare -o con -c, -S o -E con più file

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

tutte le dipendenze comile correttamente, ma ottengo il seguente errore quando si tenta di compilare gameobject.o:

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

Sono ancora un po 'nuovo nell'usare la compilazione make/separating, quindi non sono abbastanza sicuro di cosa dovrei fare. Devo solo compilarlo senza impostare un'uscita? Devo compilare gameobject.o senza usare nessuno dei miei altri file .o? Se fosse vero, i tempi di compilazione non diventerebbero abbastanza grandi per gli oggetti di grandi dimensioni se non è possibile compilare librerie con altre librerie? O sto solo leggendo questo errore completamente sbagliato?

risposta

8

Non stai creando un file di libreria qui. Un file .o è un file oggetto. In genere esiste un file oggetto per file sorgente. Quando si utilizza l'opzione -c del compilatore, prende un singolo file sorgente e lo compila in un singolo file oggetto. Non è possibile aggiungere altri file oggetto in un file oggetto esistente, quindi l'aggiunta di entrambi i file .cpp nella stessa riga del compilatore con -c non funzionerà.

Se si desidera creare una libreria, sarebbe qualcosa come libfoo.a (la "a" indica "archivio"). Se vuoi creare un eseguibile puoi farlo anche tu.

È necessario essere più chiari su esattamente quale risultato si desidera prima di poter descrivere come ottenerlo.

+0

Grazie, questo è esattamente quello che volevo sapere. – user1539179

+0

Probabilmente dovresti contrassegnarlo come accettato allora – audiFanatic