[C++] 05 FLTKのMakefile作成 Info.plistの修正

[M1 Mac, Big Sur 11.6.4, FLTK 1.3.8]

Makefileを更新しました。

“fltk-config –post”コマンドではMakefileと実行ファイルが同じディレクトリにないとappファイル内に作成されるInfo.plistの内容がおかしくなります。相対パスがMakefile基準なので修正する必要があります。

そのため一旦作成されたInfo.plistを修正するコマンドを追加しました。iconファイルを設定するキーも追加しています。

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

# フラグ設定
CXXFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags ) -std=c++11
LDFLAGS = $(shell fltk-config --use-gl --use-images --ldflags ) -lc++ 

# includeパス設定
INCLUDE = -I../include -I/opt/homebrew/Cellar/fltk/1.3.8/include

# linkパス設定
LINK = -L/opt/homebrew/Cellar/jpeg/9e/lib -L/opt/homebrew/Cellar/libpng/1.6.37/lib

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

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

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

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

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

# cppファイルのリストからオブジェクトファイル名を設定
OBJECTS   = $(addprefix $(OBJROOT), $(patsubst ./%,/%,$(SOURCES:.cpp=.o)))

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

# 依存dファイルをoファイルから作成
DEPENDS   = $(OBJECTS:.o=.d)

# 依存ファイル
-include $(DEPENDS)

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

# アプリファイル作成関連
POSTBUILD  = fltk-config --post

# oファイルから実行ファイルとappファイル作成
$(TARGET): $(OBJECTS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJECTS) $(LINK) $(LDFLAGS)
	$(POSTBUILD) $(TARGETDIR)/$@
	mkdir $(TARGETDIR)/$(TARGET).app/Contents/Resources
	cp ../images/test.icns $(TARGETDIR)/$(TARGET).app/Contents/Resources
	plutil -replace 'CFBundleExecutable' -string "test" $(TARGETDIR)/$(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundleIconFile' -string "test.icns" $(TARGETDIR)/$(TARGET).app/Contents/Info.plist
	plutil -replace 'CFBundleIdentifier' -string "org.fltk.test" $(TARGETDIR)/$(TARGET).app/Contents/Info.plist