我的项目有以下生成文件,我想将其配置为发布和调试版本。在我的代码中,我有很多#ifdef DEBUG宏,因此只需设置此宏并将-g3 -gdwarf2标志添加到编译器即可。我怎样才能做到这一点?
#ifdef DEBUG
-g3 -gdwarf2
$(CC) = g++ -g3 -gdwarf2 $(cc) = gcc -g3 -gdwarf2 all: executable executable: CommandParser.tab.o CommandParser.yy.o Command.o g++ -g -o output CommandParser.yy.o CommandParser.tab.o Command.o -lfl CommandParser.yy.o: CommandParser.l flex -o CommandParser.yy.c CommandParser.l gcc -g -c CommandParser.yy.c CommandParser.tab.o: CommandParser.y bison -d CommandParser.y g++ -g -c CommandParser.tab.c Command.o: Command.cpp g++ -g -c Command.cpp clean: rm -f CommandParser.tab.* CommandParser.yy.* output *.o
澄清一下,当我说发布/调试版本时,我希望能够只键入make并获取发布版本或make debug获取调试版本,而无需手动注释掉 makefile 中的内容。
make
make debug
您可以使用特定于目标的变量值。例子:
CXXFLAGS = -g3 -gdwarf2 CCFLAGS = -g3 -gdwarf2 all: executable debug: CXXFLAGS += -DDEBUG -g debug: CCFLAGS += -DDEBUG -g debug: executable executable: CommandParser.tab.o CommandParser.yy.o Command.o $(CXX) -o output CommandParser.yy.o CommandParser.tab.o Command.o -lfl CommandParser.yy.o: CommandParser.l flex -o CommandParser.yy.c CommandParser.l $(CC) -c CommandParser.yy.c
请记住在所有编译命令中使用 $(CXX) 或 $(CC)。
然后,’make debug’ 将有额外的标志,如 -DDEBUG 和 -g,而’make’ 不会。
附带说明一下,您可以像其他帖子建议的那样使您的 Makefile 更加简洁。