【发布时间】:2010-11-07 23:12:31
【问题描述】:
我的项目有以下 makefile,我想将其配置为发布和调试版本。在我的代码中,我有很多 #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 中的内容。
【问题讨论】:
-
注意! $(CC) = 某事不同于 CC = 某事
-
可执行目标违反了makefile的黄金法则:每个目标都应该更新命名目标的文件,在你的情况下是“可执行的”。
-
^ 如果没有,则应声明为
.PHONY