A long time ago, I wrote about Delphi prebuild/prelink/postbuild events.
In practice, especially that you cannot inherit build events, then add new ones (), it is convenient to put all you need in a script, for instance a batch file.
Passing parameters to that script, then in my experience, is easiest to do as environment variables.
That way you can do this in a script:
> %temp%\build.txt echo ~dp0=%~dp0
>> %temp%\build.txt echo $(BDS)=%BDS%
>> %temp%\build.txt echo $(INPUTDIR)=%INPUTDIR%
>> %temp%\build.txt echo $(PROJECTDIR)=%PROJECTDIR%
>> %temp%\build.txt echo $(OUTPUTDIR)=%OUTPUTDIR%
>> %temp%\build.txt echo $(Platform)=%Platform%
if "%OUTPUTDIR:~0,2%"==".." set OUTPUTDIR=%INPUTDIR%%OUTPUTDIR%
>> %temp%\build.txt echo $(OUTPUTDIR)=%OUTPUTDIR%
Passing the parameters and calling the script results in this build event contents:
set Platform=$(Platform)
set INPUTDIR=$(INPUTDIR)
set PROJECTDIR=$(PROJECTDIR)
set OUTPUTDIR=$(OUTPUTDIR)
call ..\post-build-event.bat
The IDE then shows this fragment in the project output:
Target PostBuildEvent:
set Platform=Win32&&set INPUTDIR=D:\Versioned\TestRepostitory\Test Project With Spaces\&&set PROJECTDIR=D:\Versioned\TestRepostitory\Test Project With Spaces&&set OUTPUTDIR=..\EXE Output Directory With Spaces\&&call ..\post-build-event.bat
The above batch file also shows things:
- how to handle relative directories in the
OUTPUTDIR
build parameter: check if the first two characters are ..
(trick via [WayBack] Check if Batch variable starts with “…” – Stack Overflow).
- spaces are handled fine without any need to double quote the
set
assignments
- build-event lines are concatenated using the
&&
success operator
- Parameters
INPUTDIR
and OUTPUTDIR
end with a backslash, but PROJECTDIR
does not (Delphi prebuild/prelink/postbuild events explains more about the parameters).
Note:
- environment variable
BDS
does not end in a backslash
- expansion
%~dp0
does end in a backslash
With this trick now you can copy BPL files for the right platform:
xcopy /y "%BDS%\Redist\%Platform%\rtl250.bpl" "%OUTPUTDIR%"
Note that the LibSuffix
(with value 250
for Delphi 10.2 Tokyo) is not available as environment variable, nor build parameter. The environment variable ProductVersion
however (with value 19.0
for Delphi 10.2 Tokyo) is. So technically, you could make a mapping.
–jeroen
Like this:
Like Loading...