@echo off setlocal :: --- 1. Argument Parsing Logic --- set "ARG1=" set "ARG2=" set "ARG3=" set "AUTOCLOSE=0" set "CUSTOM_EXE=" for %%x in (%*) do ( if /I "%%~x"=="autoclose" ( set "AUTOCLOSE=1" ) else ( if not defined ARG1 ( set "ARG1=%%~x" ) else if not defined ARG2 ( set "ARG2=%%~x" ) else if not defined ARG3 ( set "ARG3=%%~x" ) ) ) :: Set Defaults set "COMPILER_TYPE=clang" set "CONFIG=Debug" set "APP_EXE=JulietApp.exe" :: Check for Configuration, Compiler, or custom EXE name :: (Assuming the custom EXE name is passed as the final argument if needed) for %%i in (%ARG1% %ARG2% %ARG3%) do ( if /I "%%i"=="Release" set "CONFIG=Release" if /I "%%i"=="Profile" set "CONFIG=Profile" if /I "%%i"=="Debug" set "CONFIG=Debug" if /I "%%i"=="msvc" set "COMPILER_TYPE=msvc" if /I "%%i"=="clang" set "COMPILER_TYPE=clang" :: If argument contains .exe, treat it as the target executable name echo %%i | findstr /i ".exe" >nul && set "APP_EXE=%%i" ) :: --- 2. Map Compiler to Platform --- if /I "%COMPILER_TYPE%"=="clang" ( set "PLATFORM=x64Clang" ) else ( set "PLATFORM=x64" ) :: --- 3. Construct Paths --- set "APP_DIR=bin\%PLATFORM%-%CONFIG%" echo --- Launching %APP_EXE% --- echo Platform: %PLATFORM% echo Config: %CONFIG% :: --- 4. Execution --- if exist "%APP_DIR%\%APP_EXE%" ( pushd "%APP_DIR%" "%APP_EXE%" %* popd ) else ( echo [ERROR] Executable not found at: %APP_DIR%\%APP_EXE% echo Please build first: fbuild JulietApp-%PLATFORM%-%CONFIG% pause ) endlocal