[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]
appファイルの中に格納するInfo.plistをMakefileで作成できるようになりました。
plutilコマンドはたまに使っていましたが、空のplistファイル作成からkey-valueを入力していくのは初めてでした。なおCFBundleExecutableなどのCFはCore Foundationの略です。NSは言わずと知れたNextstep。
これが最も正統な方法でしょう。少なくともFLTKのfltk-configよりも汎用性が高いです。XcodeでしたらInfo.plistは自動的に作成してくれるはず。
TARGETDIR = ./bin
TARGET = TetrisDX
# oファイルから実行ファイル・appファイル作成
$(TARGET):$(OBJS)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY0) $(LIBRARY) $(LDFLAGS)
cp $(TARGETDIR)/$(TARGET) $(TARGET)
mkdir $(TARGET).app
mkdir $(TARGET).app/Contents
mkdir $(TARGET).app/Contents/MacOS
mv $(TARGET) $(TARGET).app/Contents/MacOS
mkdir $(TARGET).app/Contents/Resources
cp ./images/$(TARGET).icns $(TARGET).app/Contents/Resources
plutil -create xml1 $(TARGET).app/Contents/Info.plist
plutil -insert 'CFBundleInfoDictionaryVersion' -string "6.0" $(TARGET).app/Contents/Info.plist
plutil -insert 'CFBundleExecutable' -string $(TARGET) $(TARGET).app/Contents/Info.plist
plutil -insert 'CFBundleIdentifier' -string "" $(TARGET).app/Contents/Info.plist
plutil -insert 'CFBundleName' -string $(TARGET) $(TARGET).app/Contents/Info.plist
plutil -insert 'CFBundlePackageType' -string "APPL" $(TARGET).app/Contents/Info.plist
plutil -insert 'CFBundleIconFile' -string $(TARGET).icns $(TARGET).app/Contents/Info.plist
plutil -insert 'NSHighResolutionCapable' -bool true $(TARGET).app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>TetrisDX</string>
<key>CFBundleIconFile</key>
<string>TetrisDX.icns</string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>TetrisDX</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>