2012-10-15 14 views
10

Ho ottenuto un programma C++ per il quale qualcun altro ha creato un file make. Voglio compilare il programma con flag -g, ma non so dove aggiungerlo. Di seguito è riportato il file make.Come aggiungere flag di compilazione -g in un file make?

CC = g++ 
LOADLIBES = -lm 
CFLAGS = -Wall -O2 


SRC1 = Agent.cpp Breeder.cpp CandidateSolution.cpp \ 
    Cupid.cpp FateAgent.cpp Grid.cpp Reaper.cpp \ 
    fitness.cpp 

SRC2 = main.cpp 

SRC = $(SRC1) $(SRC2) 

OBJS = $(SRC1:.cpp = .o) 

AUX = $(SRC1:.c = .h) 


main: $(OBJS) 
# $(CC) $(CFLAGS) -o $(SRC) $(AUX) 

.PHONY: clean 
clean: 
    rm -f *.o main 

Dove devo aggiungere che voglio usare -g?

+0

Questo q uestion non ha davvero nulla a che fare con C++, quindi ho rimosso il tag [C++] –

+5

Secondo Robᵩ lo fa –

+0

Questa domanda riguarda come usare un Makefile. Non c'è niente in questa domanda sul linguaggio C++. Ti capita di usare make per costruire un programma scritto in C++, ma il fatto che sia scritto in C++ è ortogonale. Il tuo codice potrebbe anche essere stato scritto in FORTRAN. –

risposta

11

$ (CC) è usato per la compilazione di programmi C. $ (CXX) è usato per compilare programmi C++. Allo stesso modo $ (CFLAGS) è usato per i programmi C, $ (CXXFLAGS) è usato per compilare C++.

Modificare le prime righe di questo:

#CC = g++ 
LOADLIBES = -lm 
CXXFLAGS = -Wall -O2 -g 

(Ma vedi note degli altri sulle incompatibilità fra -O2 e -g.)

Sbarazzarsi degli spazi all'interno delle parentesi in questa linea :

OBJS = $(SRC1:.cpp=.o) 

Modificare le linee main a questo:

main: $(OBJS) $(SRC2) 
# Built by implicit rules 

Il makefile risultante dovrebbe essere simile a questo:

#CC = g++ 
LOADLIBES = -lm 
CXXFLAGS = -Wall -O2 -g 


SRC1 = Agent.cpp Breeder.cpp CandidateSolution.cpp \ 
    Cupid.cpp FateAgent.cpp Grid.cpp Reaper.cpp \ 
    fitness.cpp 

SRC2 = main.cpp 

SRC = $(SRC1) $(SRC2) 

OBJS = $(SRC1:.cpp=.o) 

AUX = $(SRC1:.c=.h) 

main: $(OBJS) $(SRC2) 
# Built by implicit rules 

.PHONY: clean 
clean: 
    rm -f *.o main 

e l'uscita dovrebbe essere simile a questo:

$ make 
g++ -Wall -O2 -g -c -o Agent.o Agent.cpp 
g++ -Wall -O2 -g -c -o Breeder.o Breeder.cpp 
g++ -Wall -O2 -g -c -o CandidateSolution.o CandidateSolution.cpp 
g++ -Wall -O2 -g -c -o Cupid.o Cupid.cpp 
g++ -Wall -O2 -g -c -o FateAgent.o FateAgent.cpp 
g++ -Wall -O2 -g -c -o Grid.o Grid.cpp 
g++ -Wall -O2 -g -c -o Reaper.o Reaper.cpp 
g++ -Wall -O2 -g -c -o fitness.o fitness.cpp 
g++ -Wall -O2 -g main.cpp Agent.o Breeder.o CandidateSolution.o Cupid.o FateAgent.o Grid.o Reaper.o fitness.o -lm -o main 

Per completezza, questa è la versione del make sto usando su Ubuntu 10.04:

$ make -v 
GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for i486-pc-linux-gnu 
+0

che restituisce '# g ++ -o Agent.cpp Allevatore.cpp CandidateSolution.cpp Cupid.cpp FateAgent.cpp Grid.cpp Reaper.cpp fitness.cpp main.cpp Agent.cpp Breeder.cpp CandidateSolution.cpp Cupid.cpp FateAgent.cpp Grid.cpp Reaper.cpp fitness.cpp' ma fa ' t produrre un file principale. –

+0

Vedere la mia modifica con makefile effettivo e output effettivo. –

+0

'Makefile: 23: *** separatore mancante. Stop. Ho dimenticato di menzionare che uso un Mac 'GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. Questo è un software gratuito; vedere la fonte per le condizioni di copia. Non c'è garanzia; nemmeno per COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE . Questo programma è stato creato per i386-apple-darwin10.0' –

3

È necessario togliere il commento alla riga:

# $(CC) $(CFLAGS) -o $(SRC) $(AUX) 

(rimuovere il sospiro hash):

$(CC) $(CFLAGS) -o $(SRC) $(AUX) 

e cambiare

CFLAGS = -Wall -O2 

a

CFLAGS = -Wall -O2 -g 

Ma si può trovare più facile il debug se si disattiva l'ottimizzazione rimuovendo -O2:

CFLAGS = -Wall -g 
+0

Questo mi dà un errore LD e cancella Agent.cpp –

Problemi correlati