[C++]『ゲームプログラミングC++』Chapter03 ディレクトリ構成変更

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, no IDE]

cppファイルが13個フラットに並んでいると扱いにくいので、サブディレクトリに振り分けました。それに合わせてMakefileも書き換えました。

cppファイル関係図
# コンパイラ設定
COMPILER = clang++
DEBUG = -g

# フラグ設定
CPPFLAGS = $(shell pkg-config sdl2 --cflags --libs) -std=c++11
LDFLAGS = -lc++

# includeパス(-I)
INCLUDE = -I./include/act -I./include/base -I./include/compo -I/opt/homebrew/Cellar/sdl2/2.0.22/include \
-I/opt/homebrew/Cellar/sdl2_image/2.0.5/include -I/opt/homebrew/Cellar/glew/2.2.0_1/include \
-I/opt/homebrew/Cellar/sdl2_mixer/2.0.4_3/include -I/opt/homebrew/Cellar/sdl2_ttf/2.0.18_1/include -I/usr/local/include

# ライブラリ直接パス(-l)
LIBRARY_l = -lsdl2 -lsdl2_image -lglew  -lsdl2_mixer -lsdl2_ttf

# ライブラリパス(-L)
LIBRARY_L = -L/opt/homebrew/Cellar/sdl2/2.0.22/lib -L/opt/homebrew/Cellar/sdl2_image/2.0.5/lib \
-L/opt/homebrew/Cellar/glew/2.2.0_1/lib -L/opt/homebrew/Cellar/sdl2_mixer/2.0.4_3/lib \
-L/opt/homebrew/Cellar/sdl2_ttf/2.0.18_1/lib -L/usr/local/lib

# 実行ファイル設定
TARGET = Game
TARGETDIR = ./bin

# ソースコードパス
SRCROOT   = ./src

# oファイルの出力ディレクトリ
OBJROOT   = ./obj

# ソースディレクトリのリスト化
SRCDIRS := $(shell find $(SRCROOT) -type d)

# ソースディレクトリから全てのcppファイルをリスト化
SRCS   = $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.cpp))

# cppファイルのリストからオブジェクトファイルをリスト化
OBJS   = $(addprefix $(OBJROOT), $(patsubst ./src%,%,$(SRCS:.cpp=.o)))

# oファイルの出力ディレクトリをリスト化
OBJDIRS   = $(addprefix $(OBJROOT), $(patsubst ./%,/%,$(SRCDIRS)))

# cppファイルからoファイル作成
$(OBJROOT)/%.o: $(SRCROOT)/%.cpp
	@if [ ! -e `dirname $@` ]; then mkdir -p `dirname $@`; fi
	$(COMPILER) $(CPPFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<

# oファイルから実行ファイル作成
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY_l) $(LIBRARY_L) $(LDFLAGS) 

# コンパイル&ビルド
.PHONY:all
all: clean $(TARGET)

# oファイル・実行ファイル削除
.PHONY:clean
clean:
	rm -rf $(OBJS) $(TARGETDIR)/$(TARGET)

[C++]『ゲームプログラミングC++』Chapter03 学習再開

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, no IDE]

この本に関しては4/14以来の記事になります。2ヶ月ぶりに戻ってきました。

Chapter05で詰んでしまい学習を中断したのですが、あれからCMakeを習得するなどそれなりにスキルアップしたので再挑戦します。当時、調子に乗って買ってしまった”スタンフォード物理学再入門 力学”を少しは使おうという意図もあります。Chapter03から復習していきます。

後から見返すとそのプロジェクトを何のために作ったのか分からなくて少々困りました。テキストファイル名などに最低限の説明を残しておくべきですね。まだディレクトリ構成が定まっていないため、Gitは使っていません。

とりあえずライブラリの整理などビルドできる環境を再構築して、ゲームを作成し動かしてみました。