[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]
Actor.hを修正することでAsteroidが動くようになりました。
GLEWおよびSDL関連ライブラリはHomebrewからインストール、SOILはGitHubから入手しビルドしました。
プログラム内で作業ディレクトリの変更さえできれば、IDEを使わなくても問題なく動作します。この本の想定読者はC++中級レベルなのでその点は大丈夫でしょう。
Apple Siliconでも正常に動作し一安心です。これでようやく次の章に進むことができます。
# コンパイラ設定
COMPILER = clang++
DEBUG = -g
# フラグ設定
CPPFLAGS = -std=c++11
LDFLAGS = -lc++ -framework CoreFoundation -framework OpenGL
# includeパス(-I)
INCLUDE = -I./include/act -I./include/base -I./include/compo -I./include/etc \
-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/opt/homebrew/Cellar/libpng/1.6.37/include \
-I/usr/local/include -I/code/cpp/mylib/include
# ライブラリ直接パス(-l)
LIBRARY_l = -lsdl2 -lsdl2_image -lglew -lsdl2_mixer -lsdl2_ttf -lsoil -lpng16 \
/code/cpp/mylib/lib/split.dylib
# ライブラリパス(-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/opt/homebrew/Cellar/libpng/1.6.37/lib \
-L/usr/local/lib \
# 実行ファイル設定
TARGET = Game
TARGETDIR = ./bin
# ソースコードパス
SRCROOT = ./src
# oファイルの出力ディレクトリ
OBJROOT = ./obj
# プロジェクト
PROJ = Chapter05_12
# ソースディレクトリのリスト化
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) $(OPTION) -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)