[C++] 264 実行ファイルからappファイルを作成 fltk-config不使用

[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