Utilizzo di G ++ per compilare più file .cpp e .h

Ho appena ereditato un codice C ++ che è stato scritto male con un file cpp che conteneva il main e una serie di altre funzioni. Ci sono anche i file .h che contengono classi e le loro definizioni di funzione.

Fino ad ora il programma è stato compilato usando il comando g++ main.cpp . Ora che ho separato le classi dai .h e .cpp ho bisogno di usare un makefile o posso ancora usare il comando g++ main.cpp ?

elenca tutti gli altri file cpp dopo main.cpp.

vale a dire

 g++ main.cpp other.cpp etc.cpp 

e così via.

Oppure puoi compilarli tutti individualmente. Quindi colleghi tutti i file “.o” risultanti insieme.

Per compilare separatamente senza link devi aggiungere l’opzione -c:

  g++ -c myclass.cpp g++ -c main.cpp g++ myclass.o main.o ./a.out 

Ora che ho separato le classi dai file .h e .cpp ho bisogno di usare un makefile o posso ancora usare il comando “g ++ main.cpp”?

Compilare più file contemporaneamente è una scelta sbagliata se lo inserirai nel Makefile.

Normalmente in un Makefile (per GNU / Make ) dovrebbe essere sufficiente scrivere che:

 # "all" is name of the default target, running "make" without params would use it all: executable1 # for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker CC=$(CXX) # tell which files should be used, .cpp -> .o make would do automatically executable1: file1.o file2.o 

In questo modo make potrebbe ricompilare correttamente solo ciò che deve essere ricompilato. Si possono anche aggiungere alcune modifiche per generare le dipendenze del file di intestazione, in modo che make ricostruisca correttamente ciò che è necessario ribuild a causa delle modifiche apportate al file di intestazione.

Puoi ancora usare g ++ direttamente se vuoi:

 g++ f1.cpp f2.cpp main.cpp 

dove f1.cpp e f2.cpp sono i file con le funzioni al loro interno. Per i dettagli su come usare make per fare la build, vedi l’eccellente documentazione di GNU make .

So che questa domanda è stata fatta anni fa, ma volevo ancora condividere come di solito compili più file c ++.

  1. Diciamo che hai 5 file cpp, tutto quello che devi fare è usare * invece di digitare ogni nome di file cpp, ad esempio g ++ -c * .cpp -o mioprogramma.
  2. Questo genererà “mioprogramma”
  3. eseguire il programma ./myprogram

È tutto!!

Il motivo per cui sto usando * è che cosa succederebbe se avessi 30 file cpp li digiti tutti? oppure usa semplicemente il segno * e risparmia tempo 🙂

ps Usa questo metodo solo se non ti interessa il makefile.

Puoi usare diversi comandi g ++ e poi colbind, ma il più semplice è usare un Makefile tradizionale o qualche altro sistema di build: come Scon (che sono spesso più facili da configurare dei Makefile).

.h i file non hanno nulla a che fare con la compilazione … ti interessano solo i file cpp … quindi scrivi g ++ filename1.cpp filename2.cpp main.cpp -o myprogram

significa che stai compilando ogni file cpp e quindi li hai collegati insieme in myprgram.

quindi esegui il tuo programma ./myprogram

Usavo un Makefile personalizzato che compilava tutti i file nella directory corrente, ma dovevo copiarlo in ogni directory che mi serviva, ogni volta.

Così ho creato il mio strumento – Universal Compiler che ha reso il processo molto più semplice quando si compilano molti file.

~ / In_ProjectDirectory $ g ++ coordin_main.cpp coordin_func.cpp coordin.h

~ / In_ProjectDirectory $ ./a.out

… Lavorato!!

Uso di Linux Mint con Geany IDE

Quando ho salvato ciascun file nella stessa directory, un file non è stato salvato correttamente all’interno della directory; il file coordin.h. Quindi, ricontrollato ed è stato salvato lì come coordin.h, e non erroneamente come -> coordin.h.gch. Le piccole cose. Arg !!