2012-10-15 89 views
10

我得到了一個C++程序,爲其他人創建了一個make文件。我想用flag -g編譯程序,但我不知道在哪裏添加它。以下是make文件。如何將編譯標誌-g添加到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 

我應該在哪裏添加我想用的-g?

+0

這q uestion與C++無關,因此我刪除了[C++]標籤 –

+5

根據Robᵩ的說法,它的確如此 –

+0

這個問題是關於如何使用Makefile。在這個關於C++語言的問題中沒有任何東西。你碰巧使用make來構建一個用C++編寫的程序,但它用C++編寫的事實是正交的。你的代碼可能已經寫在FORTRAN中。 –

回答

11

$(CC)用於編譯C程序。 $(CXX)用於編譯C++程序。同樣,$(CFLAGS)用於C程序,$(CXXFLAGS)用於編譯C++。

更改的前幾行這樣的:

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

(但是看別人的筆記約-02和-g之間不兼容。)

獲得該行擺脫空間的括號內:

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

更改main線以這樣的:

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

產生的makefile文件應該是這樣的:

#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 

和輸出應該是這樣的:

$ 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 

爲了完整,這是我使用的化妝版本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

輸出'#g ++ -o Agent.cpp飼養員。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'但是'生成一個主文件。 –

+0

看到我的編輯與實際的生成文件和實際輸出。 –

+0

'Makefile:23:***缺少分隔符。 Stop.'我忘了提及我使用Mac'GNU Make 3.81 Copyright(C)2006 Free Software Foundation,Inc. 這是免費軟件;請參閱複製條件的來源。 沒有保修;甚至不適用於適銷性或特定用途的適用性。 此程序爲i386-apple-darwin10.0構建' –

3

您需要取消對該行:

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

(刪除散列嘆氣):

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

,並更改

CFLAGS = -Wall -O2 

CFLAGS = -Wall -O2 -g 

但你可能會發現更容易調試,如果你通過刪除-O2禁用優化:

CFLAGS = -Wall -g 
+0

這給我一個LD錯誤並刪除Agent.cpp –

相關問題