Compile oder Build?
Der Compiler erzeugt von sich aus Units nur neu, wenn sie sich verändert haben und das tun sie hier nicht, also mußt DU explizit zwangsweise neu compilieren, also "alles neu erzeugen".
Ganz fies, wenn man solche DEFINES in den Projektoptionen umstellt, wo sich an den Code-Dateien dann garnichts ändert.
Aber sicher, dass dein Code so funktioniert?
$IFDEF prüft nur DEFINES, aber du willst CONDITIONAL-EXPRESSIONS auswerten und das macht man mit $IF.
Wenn der Parser echt doof ist und sowas durch lässt, dann könnten deine DEFINEs "define(encrypt_full)" und "define(encrypt_tiny)" heißen, anstatt "encrypt_full" und "encrypt_tiny".
Delphi-Quellcode:
{$IF define(encrypt_full)}
FLicense := Tlicense.create;
...
Oder mmal so probieren.
Delphi-Quellcode:
// Unit 1 oder Include 1
const
encrypt_full = False;
encrypt_tiny = True;
// Unit 2
{$IF encrypt_full}
FLicense := TLicense.Create;
{$ELSEIF encrypt_tiny}
FLicense := TLicenseSimple.Create;
{$ELSE}
FLicense := TLicenseMock.Create;
{$IFEND}
Beim Umstellen
ändert sich
Unit 1, wird neu kompiliert,
und mit etwas Glück erzwingt das auch ein Neukompilieren von
Unit 2.
So muß es auf jeden Fall neu kompilieren und die Code-Optimierung müsste schlau genug sein und alle nichtbenötigten Zweige entfernen. (bei "echten" Konstanten)
Delphi-Quellcode:
// Unit 2
IF encrypt_full
THEN
FLicense := TLicense.Create
ELSE IF encrypt_tiny
THEN
FLicense := TLicenseSimple.Create
ELSE
FLicense := TLicenseMock.Create;
Was durch typisierte Konstanten passiert, könnte noch interessant sein, da das in Wirklichkeit nur "schreibgeschützte" Variablen sind, deren
eine Speicherstelle man dennoch verändern "könnte".
Delphi-Quellcode:
const
encrypt_full: Boolean = False;
encrypt_tiny: Boolean = True;