Как добавить флаг компиляции -g в файл make?

У меня есть программа на С++, для которой кто-то сделал файл 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?

Ответ 1

$(CC) используется для компиляции программ на C. $(CXX) используется для компиляции программ на С++. Аналогично $(CFLAGS) используется для программ C, для компиляции С++ используется $(CXXFLAGS).

Измените следующие строки:

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

(Но см. примечания других о несовместимости между -O2 и -g.)

Избавьтесь от пробелов внутри круглых скобок в этой строке:

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

Измените строки main на это:

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

Получившийся make файл должен выглядеть так:

#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

Для полноты, это версия make, которую я использую на 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

Ответ 2

Вам нужно раскомментировать строку:

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

(удалите хеш-вздох):

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

И измените

CFLAGS = -Wall -O2

к

CFLAGS = -Wall -O2 -g

Но вы можете найти отладку легче, если отключить оптимизацию, удалив -O2:

CFLAGS = -Wall -g