[C++]『ゲームプログラミングC++』Chapter05 Makefile案

[M1 Mac, Big Sur 11.6.5]

完成作ではありませんが、どうやら詰んでしまったようなので記念に上げておきます。

ビルドまでできたものの、実行時にShaderが読めないとかで起動できません。XCodeでも同様でした。

SOIL(Simple OpenGL Image Library)関連でも3つエラーが出ており、該当部分を無効にして無理やりビルドしましたが結局実行できずです。

そもそもSOILの公式サイトは閉鎖されていて、GitHubに有志?の方がアップされているのみで挙動が怪しくなるのも仕方ないと思います。

今はChapter02のコードを自分で書こうとしていますが、Chapter05に着手したらかなりの修正が必要になるでしょう。

今なりに代替策はあるはずなので何とかしたいものです。

# コンパイラ設定
COMPILER = clang++
DEBUG = -g

# フラグ設定
CPPFLAGS = $(shell pkg-config sdl2 --cflags --libs) -std=c++11
CPPFLAGS2 = $(shell pkg-config sdl2_image --cflags --libs)
CPPFLAGS3 = $(shell pkg-config glew --cflags --libs)
CPPFLAGS4 = $(shell pkg-config sdl2_mixer --cflags --libs)
CPPFLAGS5 = $(shell pkg-config sdl2_ttf --cflags --libs)
CPPFLAGS6 = $(shell pkg-config soil --cflags --libs)

LDFLAGS = -lc++ -framework CoreFoundation -framework OpenGL

# includeパス(-I)
INCLUDE = -I./include -I/opt/homebrew/Cellar/sdl2/2.0.20/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 -lsoil

# 優先ライブラリパス(-L)
LIBRARY_L = -L/opt/homebrew/Cellar/sdl2/2.0.20/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

# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)

# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src/%.cpp,/%.o,$(SRCS)))

# 実行ファイル
TARGETDIR = ./bin
TARGET = Game05_01

list : echo $(SRCS) && echo $(OBJS)
	
# cppファイルからoファイル作成 $<:依存ファイル
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
	$(COMPILER) $(CPPFLAGS) $(CPPFLAGS2) $(CPPFLAGS3) $(CPPFLAGS4) $(CPPFLAGS5) $(CPPFLAGS6) $(INCLUDE) $(DEBUG) -o $@ -c $<

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

# 全ソース・コンパイル&ビルド
.PHONY:all
all: clean $(OBJS) $(TARGET)

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