Compiler Options per include Datei

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Compiler Options per include Datei

Beitrag von charlytango »

Hi,
unter Compiler Options/Custom Options (Compilereinstellungen/Benutzerdefinierte Einstellungen) kann man projektweit #DEFINE Einstellungen vornehmen. Und das ganz bequem mit der Schaltfläche "Defines".

Das klappt bei wenigen Einträgen ganz gut. bei mehrern bzw vielen davon, die dann evtl auch noch beschrieben werden müssen leider nicht bequem.

In anderen Pascaldialekten kann man Dateien mit solchen Definitionen ins Projekt einbinden (z.B. meinprojekt.cfg).
Meine Suche danach war leider frustran und ohne wirkliches Ergebnis.

Könnt ihr mir da bitte auf die Sprünge helfen?
THX
Zuletzt geändert von charlytango am Fr 1. Nov 2019, 15:22, insgesamt 3-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Compiler Options per include Datei

Beitrag von af0815 »

Die Custom Options liegen im *.lpi File und dort gibt es keine 'Includes'.

Ich mache es nicht so bequem und schreibe meine Defines unter Custom options -dMyDefine hinein. Damit kann ich das per C&P jederzeit vervielfältigen. Allerdings erscheinen nach der händischen Deklaration auch sofort in den Defines und können dort aktiviert und deaktiviert werden. Man muss halt einmal alle aktivieren, damit man die herauskopieren kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Compiler Options per include Datei

Beitrag von charlytango »

erstmal danke f die schnelle Antwort.

So etwas hatte ich schon befürchtet. Spannend dass das in Delphi 5 möglich war und hier nicht.
Irgend einen Grund wird das schon haben.

Case Closed.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [Erledigt] Compiler Options per include Datei

Beitrag von fliegermichl »

Wieso soll das nicht gehen?

{$i meineconfig.cfg}

bindet die Datei ein und da kann man {$define abc} reinschreiben.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: [Erledigt] Compiler Options per include Datei

Beitrag von Socke »

Man könnte auch in den Projekteinstellungen unter Konfiguration und Ziele > Zusätzliche Compiler-Konfigurationsdatei einbinden (@) eine Datei angeben. Diese muss dan das Format der fpc.cfg anstatt der Programmcode-Deklarationen haben.
Ich finde, das ist eine schönere Methode. Hier kann ich keine Datei vergessen und die Quelltextdateien muss ich nicht ändern.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [Erledigt] Compiler Options per include Datei

Beitrag von charlytango »

Socke hat geschrieben:Man könnte auch in den Projekteinstellungen unter Konfiguration und Ziele > Zusätzliche Compiler-Konfigurationsdatei einbinden (@) eine Datei angeben. Diese muss dan das Format der fpc.cfg anstatt der Programmcode-Deklarationen haben.
Ich finde, das ist eine schönere Methode. Hier kann ich keine Datei vergessen und die Quelltextdateien muss ich nicht ändern.


Diese Methode würde ich auch schön finden nur wehrt sie sich.

ich habe eine Datei app.cfg im Format der fpc.cfg erstellt:

..und wie angegeben eingebunden. Wurde alles ohne meckern akzeptiert.
Ein Testprojekt habe ich beigefügt. (Es stilisiert das Einschalten einer Splashscreen. programmatisch sicher falsch, aber es geht hier nur um den Code und ide verwendung.)

Nach dem Einbinden der app.cfg hat sich erstmal (unmittelöbar nach Einbinden des config files und speichern der Einstellungen) gar nichts getan. Ich meine damit dass der Code im Editor von grau auf schwarz wechseln sollte wenn das entsprechende define aktiv ist.

Nach schließen und öffnen der Projektdatei (project1.lpr) wurde der Code angepasst und akiviert.
Dieser Trick hat die anderen Dateien (z.B. unit1) völlig unbeeindruckt gelassen.

Scheinbar werden die Einstellungen im zusätzlichen Konfigurationsfile dort gar nicht berücksichtigt

getestet mit einer Neuinstallation Laz 2.0 fixes, FPC3.2fixes (Lazarus IDE 2.0.7 r62130)

Benutzt man die Defines der Custom Options werden Änderungen prompt im Sourcecode angezeigt.

Ist das Benutzen eines zusätzlichen Compiler Config Files nun nur für den Compiler und die Projektdatei gedacht oder gibt es da noch lose Fäden?

LG
Dateianhänge
project1.zip
(126.01 KiB) 133-mal heruntergeladen

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [Erledigt] Compiler Options per include Datei

Beitrag von charlytango »

fliegermichl hat geschrieben:Wieso soll das nicht gehen?

{$i meineconfig.cfg}

bindet die Datei ein und da kann man {$define abc} reinschreiben.


Ich nehme an daß {$i meineconfig.cfg} dann zumindest in jedem betroffenen Sourcecodefile stehen müsste.
Oder geht das an einem Ort projektweit?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [Erledigt] Compiler Options per include Datei

Beitrag von fliegermichl »

charlytango hat geschrieben:
fliegermichl hat geschrieben:Wieso soll das nicht gehen?

{$i meineconfig.cfg}

bindet die Datei ein und da kann man {$define abc} reinschreiben.


Ich nehme an daß {$i meineconfig.cfg} dann zumindest in jedem betroffenen Sourcecodefile stehen müsste.
Oder geht das an einem Ort projektweit?


Das einbinden muss in jeder unit gemacht werden.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: [Erledigt] Compiler Options per include Datei

Beitrag von Socke »

charlytango hat geschrieben:Nach dem Einbinden der app.cfg hat sich erstmal (unmittelöbar nach Einbinden des config files und speichern der Einstellungen) gar nichts getan. Ich meine damit dass der Code im Editor von grau auf schwarz wechseln sollte wenn das entsprechende define aktiv ist.

Nach schließen und öffnen der Projektdatei (project1.lpr) wurde der Code angepasst und akiviert.
Dieser Trick hat die anderen Dateien (z.B. unit1) völlig unbeeindruckt gelassen.

Scheinbar werden die Einstellungen im zusätzlichen Konfigurationsfile dort gar nicht berücksichtigt

getestet mit einer Neuinstallation Laz 2.0 fixes, FPC3.2fixes (Lazarus IDE 2.0.7 r62130)

Benutzt man die Defines der Custom Options werden Änderungen prompt im Sourcecode angezeigt.

Ist das Benutzen eines zusätzlichen Compiler Config Files nun nur für den Compiler und die Projektdatei gedacht oder gibt es da noch lose Fäden?

Soweit ich erkennen kann, wirkt sich die zusätzliche Konfigurationsdatei korrekt auf den Compiler aus.
Dass diese im Code Editor nicht korrekt erkannt bzw. beachtet werden, wäre wohl einen Bugeintrag wert.

Über den Menüeintrag Ansicht > IDE-Interna > Über FPC, Reiter FPC output kann man gut erkennen, wie Lazarus den Compiler nach den verwendeten Macros und Defines abfragt. Dabei wird aber nur die Standardkonfigurationsdatei verwendet. Diese müssten eigentlich Projektspezifische ausgewertet werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Compiler Options per include Datei

Beitrag von charlytango »

Ich habe nun ein voll funktionierendes Demoprojekt erstellt bei dem man im zusätzlichen config file app.cfg eine Splashscreen per $DEFINE ein oder ausschalten kann.

Die Defines werden beim Kompilieren berücksichtigt, das Projekt reagiert wie erwartet
In der IDE werden die Defines des zusätzlichen Config files (in diesem Beispiel app.cfg) nicht berücksichtigt, im Editor ändert sich bei Änderungen in der app.cfg nichts.

Socke hat geschrieben:Über den Menüeintrag Ansicht > IDE-Interna > Über FPC, Reiter FPC output kann man gut erkennen, wie Lazarus den Compiler nach den verwendeten Macros und Defines abfragt. Dabei wird aber nur die Standardkonfigurationsdatei verwendet. Diese müssten eigentlich Projektspezifische ausgewertet werden.


Auch beim FPC Output wird app.cfg nicht berücksichtig und auch auch nicht interpretiert.

Text für eine Bugmeldung und das Codeexample liegt bei.
Sollen dazu zwei Bugmeldungen oder nur eine gemeinsame eingestellt werden?



********************Text für Bugmessage

It is possible to use an additional compiler config file per project.

Menue: Project > Project Options... //Compiler Options > Config and Target > Use additional compiler config file

During compilation this additional config file (in this case app.cfg) is taken into consideration and it works as expected.

But the IDE Editor does not use the values of the defined additional configuration file(app.cfg).
Changes in app.cfg do not change the behavior of the editor as it should be.

Given the definition of USE_SPLASH in the additional configuration file (app.cfg) and the code example:
{$IFDEF USE_SPLASH}
lblSplash.Caption:='Splashscreen should be used';
{$ELSE}
lblSplash.Caption:='No Splashscreen should be shown';
{$ENDIF}

no changes were made in the editor when changing the value USE_SPLASH in app.cfg. One case should be engrayed, the other should be not engrayed. But nothing happens.

Furthermore app.cfg is not included in "View > IDE Internals > About FPC // FPC output".
Only the standard file fpc.cfg is interpreted. The additional config file (in this case app.cfg) is neither shown nor interpreted.
Dateianhänge
project1.zip
example for bugreport
(126.41 KiB) 131-mal heruntergeladen

Antworten