In the case where the difference is simply which code sequence is executed, the cleanest solution is to use Boolean constants to control which code is executed.
FP_Initialize_Required : constant Boolean := True; ... if FP_Initialize_Required then ... end if;
Not only will the code inside the
if statement not be executed if
the constant Boolean is
False, but it will also be completely
deleted from the program.
However, the code is only deleted after the
has been checked for syntactic and semantic correctness.
(In contrast, with preprocessors the code is deleted before the
compiler ever gets to see it, so it is not checked until the switch
is turned on.)
Typically the Boolean constants will be in a separate package,
package Config is FP_Initialize_Required : constant Boolean := True; Reset_Available : constant Boolean := False; ... end Config;
Config package exists in multiple forms for the various targets,
with an appropriate script selecting the version of
Then any other unit requiring conditional compilation can do a
Config to make the constants visible.