Makefile

#-------------------------------------------------------------------------------
#   HAL Programming Contest 2019 makefile for GCC
#

SrcDir := src

SourceFiles := Combine.cpp

ObjectFiles := $(SourceFiles:%.cpp=%.o)
DependFiles := $(SourceFiles:%.cpp=%.d)
ExecuteFile := ./hpc2019.exe

# Atを@にしておくと、コマンドの実行結果出力を抑止できます。
# 出力が必要な場合は空白を指定します。
At := @
#At := 

# ターゲットを出力する、ユーティリティ。
# 無効にするときは空白を指定します。
#EchoTarget = @echo '\# $@'
EchoTarget = 

Compiler := g++
Linker := g++

# -Wall : 基本的な警告を全て有効に
# -Werror : 警告はエラーに
# -Wshadow : ローカルスコープの名前が、外のスコープの名前を隠している時に警告
# -Wno-error=sign-compare : 比較時の符号の有無の混在は、警告は出すがエラーにしない
# -fno-asm, -fno-exceptions : インラインアセンブラ・例外は使用不可(作品規定を参照)
CompileOption := -std=c++11 -Wall -Werror -Wshadow -Wno-error=sign-compare -fno-asm -fno-exceptions -DLOCAL -MMD -O3
LinkOption := -O3

# 処理が重いデバッグ用コードを有効にします。
# チェッカーの開発者向けです。
# CompileOption += -DHEAVY_DEBUG

#-------------------------------------------------------------------------------
.PHONY: all clean run json help

all : $(ExecuteFile)

$(ExecuteFile) : $(ObjectFiles)
	$(EchoTarget)
	$(At) $(Linker) $(LinkOption) $(ObjectFiles) -o $(ExecuteFile)

clean :
	$(EchoTarget)
	$(At) rm -fv $(ExecuteFile) $(ObjectFiles) $(DependFiles) $(ExecuteFile).stackdump

run : $(ExecuteFile)
	$(At) $(ExecuteFile)

json : $(ExecuteFile)
	$(At) $(ExecuteFile) -j

help :
	@echo '--- ターゲット一覧 ---'
	@echo '- all     : 全てをビルドし、実行ファイルを作成する。(デフォルトターゲット)'
	@echo '- clean   : 生成物を削除する。'
	@echo '- help    : このメッセージを出力する。'
	@echo '- run     : 実行する。'
	@echo '- json    : jsonを出力する。'

%.o : %.cpp Makefile
	$(At) $(EchoTarget)
	$(At) $(Compiler) $(CompileOption) -c $< -o $@

#-------------------------------------------------------------------------------
-include $(DependFiles)