#Windows MinGW GCC(c++)用のMakefileテンプレート
ひな型は、AIで作成したものを修正しました。
Windows OS MinGW
実行ファイルはa.exeで、デバッグ用はdebug.exeです。
不要なオプションがあると思います。随時更新したいと思います。
# AtCoder Makefile
# main.cpp a.exe
#
# コンパイラとフラグの設定
CXX = g++.exe
CXXFLAGS = -Wall -Wextra -std=c++20 -O2 -march=native
CXXFLAGS += -finput-charset=UTF-8 -fexec-charset=CP932
# CXXFLAGS += -static-libgcc -static-libstdc++
CXXFLAGS += -Wuninitialized -fverbose-asm -fdiagnostics-color=always
# CXXFLAGS += -fsanitize=undefined
# デバッグ用のフラグ
DEBUG_FLAGS = -g3 -D_GLIBCXX_DEBUG -Wall -Wextra
DEBUG_FLAGS += -O0 -std=c++20 -march=native
# DEBUG_FLAGS += -fsanitize=address # ASanを有効にする場合
DEBUG_FLAGS += -Wuninitialized
# DEBUG_FLAGS += -static-libgcc -static-libstdc++
# インクルードパスとライブラリパス
INCLUDE_DIRS = -IC:/Users/etsuk/ac-library
# LIBRARY_DIRS = -L/path/to/lib -L/path/to/another/lib
# LIBRARIES = -lmylib -lanotherlib
# 実行ファイルの名前
TARGET = a.exe
DEBUG_TARGET = debug.exe # デバッグ用の実行ファイル
# ソースファイルとオブジェクトファイル
SRCS = main.cpp
OBJS = $(SRCS:.cpp=.o)
DEBUG_OBJS = $(SRCS:.cpp=.debug.o)
ASM_FILES = $(SRCS:.cpp=.s)
PREPROCESSED_FILES = $(SRCS:.cpp=.i)
# ビルド対象
all: $(TARGET)
# all: $(TARGET) $(ASM_FILES) $(PREPROCESSED_FILES)
# 実行ファイルのリンク
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LIBRARY_DIRS) -o $(TARGET) $(OBJS) $(LIBRARIES)
# 各.cppファイルをコンパイルして.oファイルを生成
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE_DIRS) -c $< -o $@
# デバッグ用コンパイル
debug: $(DEBUG_TARGET)
$(DEBUG_TARGET): $(DEBUG_OBJS)
$(CXX) $(DEBUG_FLAGS) $(INCLUDE_DIRS) -o $(DEBUG_TARGET) $(DEBUG_OBJS)
# デバッグ用オブジェクトファイルを生成
%.debug.o: %.cpp
$(CXX) $(DEBUG_FLAGS) $(INCLUDE_DIRS) -c $< -o $@
# デバッグ実行
debug-run: $(DEBUG_TARGET)
./$(DEBUG_TARGET)
# 各.cppファイルをコンパイルして.sファイルを生成
%.s: %.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE_DIRS) -S $< -o $@
# 各.cppファイルをプリプロセッサのみ実行して.iファイルを生成
%.i: %.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE_DIRS) -E $< -o $@
# 実行ルール
run: $(TARGET)
./$(TARGET)
# アセンブリファイルを生成
asm: $(ASM_FILES)
# プリプロセッサ出力を生成
preprocess: $(PREPROCESSED_FILES)
# ojtest
ojtest: $(TARGET)
oj test
# クリーンアップ
clean:
rm -f $(OBJS) $(TARGET) $(DEBUG_TARGET) $(DEBUG_OBJS) $(ASM_FILES) $(PREPROCESSED_FILES)
# .PHONYターゲット
.PHONY: all clean asm preprocess debug debug-run