[解決済み] デバッグとリリースのビルドを行うためのmakefileを設定するにはどうすればよいですか?
2022-02-14 04:24:55
質問
私のプロジェクトには以下のような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 の中で手動でコメントアウトすることなく、デバッグビルドができます。
解決方法は?
を使用することができます。 ターゲット固有の変数値 . 例
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をもっと簡潔にすることができます。
関連
-
[解決済み】makefile "そのようなファイルやディレクトリはありません"
-
[解決済み】「make」と「make all」の違いとは?
-
[解決済み] make clean、make clobber、make distclean、make mrproper、make realcleanの違いは何ですか?
-
[解決済み] makefile の "ifeq" 条件構文
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み] makefile の記号 $@ と $< はどういう意味ですか?
-
[解決済み】makefileに'cd'コマンドを記述するには?
-
[解決済み] ってなんですか?(アットマークコロン)はMakefileの中でどういう意味ですか?
-
[解決済み] 変数が設定されていない場合、makefileを中断させるには?
-
[解決済み] CLionでCMakeの代わりにローカルのmakefileを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ターゲットが指定されていない場合、「make」アプリはどのようにしてビルドするデフォルトターゲットを知るのですか?
-
[解決済み] makefile の "ifeq" 条件構文
-
[解決済み] makefile で条件規則を使用する
-
[解決済み] makefileの "all "は何の略ですか?
-
[解決済み] "make run "への引数の渡し方
-
[解決済み】makefileでターゲットのリストを取得する方法とは?
-
[解決済み] Make: コマンドが失敗した後、どのように続行するのですか?
-
[解決済み] CLionでCMakeの代わりにローカルのmakefileを使用する
-
[解決済み] 別のMakefileからMakefileを呼び出すには?
-
[解決済み] Makefileの:=と=の違いは何ですか?