[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]
FLTKソースコードのfltk-config.inの内容を確認しました。特殊なスクリプトを書いているわけではなくbashコマンドの組み合わせでした。
ただMakefileで一からinfo.plistを作ることはできず、あらかじめ作成しておいたinfo.plistをappファイル内にコピーするようにしました。
いまだにMakeは扱いづらいです。ChatGPTもさすがにMakefileには詳しくなく、自力で解決するしかないようです。
if test -n "$post"; then
running=`uname`
if test "$running" = "Darwin"; then
# if FLTK targets MacOS+X11, apps need not be bundled
if test `echo $LDLIBS | fgrep -c -e " -lX11"` = 1; then
running=""
fi
fi
case $running in
Darwin)
echo Creating "'$post.app'" bundle for desktop...
id=`echo $post | tr ' ' '_'`
# Make the bundle directory and move the executable there
rm -rf "$post.app/Contents/MacOS"
mkdir -p "$post.app/Contents/MacOS"
mv "$post" "$post.app/Contents/MacOS"
# Make a shell script that runs the bundled executable
echo "#!/bin/sh" >"$post"
echo 'dir="`dirname \"$0\"`"' >>"$post"
echo 'exec "$dir/'"$post.app/Contents/MacOS/$post"'" "$@"' >>"$post"
chmod +x "$post"
# Make the simplest Info.plist needed for an application
cat >"$post.app/Contents/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleExecutable</key>
<string>$post</string>
<key>CFBundleIdentifier</key>
<string>org.fltk.$id</string>
<key>CFBundleName</key>
<string>$post</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
EOF
;;
esac
fi
# oファイルから実行ファイル作成
$(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
cp info.plist $(TARGET).app/Contents