如何将compile flag-g添加到make文件中? 我得到了一个C++程序,其他人制作了一个make文件。我想用flag-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

如何将compile flag-g添加到make文件中? 我得到了一个C++程序,其他人制作了一个make文件。我想用flag-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,c++,makefile,C++,Makefile,我应该在哪里添加我想使用-g的内容?您需要取消对该行的注释: # $(CC) $(CFLAGS) -o $(SRC) $(AUX) (删除散列标记): 改变 CFLAGS = -Wall -O2 到 但是,如果通过删除-O2禁用优化,您可能会发现调试更容易: CFLAGS = -Wall -g $(CC)用于编译C程序$(CXX)用于编译C++程序。类似地,$C(cFLAGS)用于C程序,$(CXXFLAGS)用于编译C++。 将前几行更改为: #CC = g++ LOADLIBES

我应该在哪里添加我想使用-g的内容?

您需要取消对该行的注释:

#   $(CC) $(CFLAGS) -o $(SRC) $(AUX) 
(删除散列标记):

改变

CFLAGS = -Wall -O2

但是,如果通过删除
-O2
禁用优化,您可能会发现调试更容易:

CFLAGS = -Wall -g
$(CC)用于编译C程序$(CXX)用于编译C++程序。类似地,$C(cFLAGS)用于C程序,$(CXXFLAGS)用于编译C++。 将前几行更改为:

#CC = g++
LOADLIBES = -lm
CXXFLAGS = -Wall -O2 -g
main: $(OBJS) $(SRC2)
#   Built by implicit rules
(但请参见其他人关于-O2和-g之间不兼容的注释。)

去掉这行括号内的空格:

OBJS = $(SRC1:.cpp=.o)
main
行更改为:

#CC = g++
LOADLIBES = -lm
CXXFLAGS = -Wall -O2 -g
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
输出应该如下所示:

#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版本:

$ 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

这个问题与C++无关,所以我删除了[C++ ]标签,这个问题是关于如何使用一个Mag文件。这个问题没有关于C++语言的问题。您碰巧正在使用make来构建一个用C++编写的程序,但是C++编写的程序是正交的。你的代码也可能是用FORTRAN编写的。@ JordBILBLE我不同意C++与这个Mag文件是正交的。正如答案所示,MaForm文件有C++特有的“烘烤”语法,因此MaForm文件与C++有内在的关系,比FORTRAN更为重要。特别是在使用这些C++特定的标志时,输出的是OP。文件。
Makefile:23:**缺少分隔符。停止。< /代码>我忘了提到我使用了Mac代码> GNU制作了3.81版权(C)2006免费软件基金会,这是免费软件;有关复制条件,请参见源。没有担保;甚至不是为了适销性或适合某一特定目的。此程序为i386-apple-darwin10.0构建
第23行的第一个字符必须是TAB,而不是一系列空格。