小编典典

如何配置我的 makefile 以进行调试和发布版本?

all

我的项目有以下生成文件,我想将其配置为发布和调试版本。在我的代码中,我有很多#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
中的内容。


阅读 193

收藏
2022-07-02

共1个答案

小编典典

您可以使用特定于目标的变量值。例子:

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 更加简洁。

2022-07-02