AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script) ?
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script) ?

Ein Thema von Rollo62 · begonnen am 29. Apr 2020 · letzter Beitrag vom 30. Apr 2020
Antwort Antwort
Seite 1 von 2  1 2      
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#1

Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script) ?

  Alt 29. Apr 2020, 11:51
Delphi-Version: 5
Hallo zusammen,

der FPC hat ein schönes Feature, gibt es vielleicht was Vergleichbares bei Delphi Pascal ?
! Wohlgemerkt, mir geht es um die Auswertung VOR dem eigentlichen Code-teil,
um die Ergebnisse in einem conditionalen Code benutzen zu können, ohne Include "{I 'MyInc.inc'}".
Wie der Zugriff im Code funktioniert ist mir klar.

Zitat:
1.1.23 $I or $INCLUDE : Include compiler info

In this form:

{$INCLUDE %xxx%}

where xxx is one of TIME, DATE, FPCVERSION or FPCTARGET, will generate a macro with the value of these things. If xxx is none of the above, then it is assumed to be the value of an environment variable. It's value will be fetched, and inserted in the code as if it were a string.

For example, the following program

Program InfoDemo;

Const User = {$I %USER%};


begin
Write ('This program was compiled at ',{$I %TIME%});
Writeln (' on ',{$I %DATE%});
Writeln ('By ',User);
Writeln ('Compiler version : ',{$I %FPCVERSION%});
Writeln ('Target CPU : ',{$I %FPCTARGET%});
end.

Creates the following output :

This program was compiled at 17:40:18 on 1998/09/09
By michael
Compiler version : 0.99.7
Target CPU : i386

Sowas naheliegendes "Const User = '$(MyVar)';" hatte ich schon probiert, geht leider nicht.

Geändert von Rollo62 (29. Apr 2020 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#2

AW: Ist der Zugriff auf Environmental variables mit compiler directives möglich ?

  Alt 29. Apr 2020, 12:31
Hab' mir mal vor Jahren 'nen Before-/AfterCompile-Experten geschrieben, der u.a. 'ne Include-Datei für das gerade zu kompilierende Projekt erstellt. Dadrin stehen diverse Daten wie z. B. das Kompilierdatum, diverses aus den Versionsinformationen zum Projekt.

Der Experte müsste auch auf die Umgebungsvariabeln zugreifen können, die man dann beim Schreiben der Includedatei berücksichtigen kann.
Prinzipiell müsstest Du dort alles das nutzen können, was Du auch in 'nem Programm nutzen kannst.
Delphi-Quellcode:
{$DEFINE SBExperten_BeforeCompile}
(* Konstanten für die Versionsinformationen ... *)
Const
  csFV_CompileDate = '29.04.2020';
  csFV_CompileTime = '11:31:55';
  csFV_LastCompile = '29.04.2020 11:31:55';
  csFV_FileName = 'Project1';
  csFV_LegalCopyright = 'Copyright 2020 Dein Name oder sonstwas';
  csFV_Compiler = 'Delphi 7';
  csFV_CompilerVersion = '15';
  csFV_RTLVersion = '15';
  csFV_FileVersion = '0.0.0.0';
  csFV_CompanyName = 'Firmenname';
  csFV_InternalName = 'Project1';
  csFV_OriginalFilename = 'Project1';
  csFV_ProductName = 'Project1';
  csFV_ProductVersion = '0.0.0.0';
  csFV_FileDescription = 'Eine vernünftige Programmbeschreibung';
  csFV_LegalTradeMarks = '';
  csFV_Comments = 'Ein sinnvoller Kommentar zum Programm.';
  csFV_MajorVersion = '0';
  csFV_MinorVersion = '0';
  csFV_ReleaseVersion = '0';
  csFV_BuildVersion = '0';
  csFV_CodePage = '1252';
  csFV_Locale = '1031';
Das Erstellen einer Includedatei, die alles das, was Du in Deinem Beispiel aufführst enthält, sollte ohne übermäßig großen Aufwand möglich sein und steht Dir dann bei allen Programmen zu Verfügung. Ob Du die Includedatei nun in alle Programme einbindest oder nicht, bleibt Dir überlassen. Da sie vor jedem Kompilieren neu erstellt wird, enthält sie immer die aktuellen Informationen zum aktuellen Projekt.

Zum Stöbern, wie es eventuell umzusetzen sein könnte: IOTAProject site:delphipraxis.net
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ist der Zugriff auf Environmental variables mit compiler directives möglich ?

  Alt 29. Apr 2020, 15:36
Dankesehr, ist zumindest eine Lösung.
Auch wenn ich doch noch hoffe das solche Dinge in der IDE/Sprache selbst erledigt werden können.

Das ich z.B. nicht prüfen kann ob eine Include-Date an einem Ort existiert ist ziemlich blöd,
denn dann könnte ich stattdessen eine Default-Datei includieren.
Der Weg über die Environment-Variablen wäre auch als Krücke für solche Dinge gedacht.

Include-Datei automatisch erzeugen ist natürlich möglich, damit wäre dann theoretisch auch noch mehr machbar.
Muss ich mal sacken lassen.

Eine andere Überlegung die ich hatte war das man Settings über Option-Sets verwaltet,
um z.B. Gruppen von Includes bequem ein- und auszuschalten.
Auch das ist aber nicht so komfortabel und sicher das ich mich darauf immer verlassen möchte.
Bei den Options scheint bei mir immer was hängen zu bleiben, oder man hat sich einmal vertippt
und dann ist er hinüber.

Wahrscheinlich ist ein kleines, externes Tool was dies alles regeln kann wirklich das Beste.
Welches dann im Pre- Post-Compiler aufgerufen werden kann, und zusätzlich noch manuell.
So könnte man ein frisches Projekt nehmen, einfach eimal tool.exe /INIT FMX_Typ_01 o.ä. aufrufen, und alles wäre ruckzuck vorbereitet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ist der Zugriff auf Environmental variables mit compiler directives möglich ?

  Alt 29. Apr 2020, 15:57
Per se ist es nicht möglich dass "Variablen" im Compiler und in Strings aufgelöst werden.

Man kann sich ein PreCompileScript basteln und dort die PAS/INC umschreiben/aktualisieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ist der Zugriff auf Environmental variables mit compiler directives möglich ?

  Alt 29. Apr 2020, 16:30
Ja so hatte ich Delphi.Narium auch verstanden.

Oder gibt es einen Unterschied zw. "Experten" und "Script", siehe unten ?
Womöglich kann ein Script nicht die geöffneten, modifizierten Units sehen,
der Experte aber schon.

Ich frage mal blöd, gibt es da eigentlich nichts Fertiges auf das man Aufbauen kann ?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script)

  Alt 29. Apr 2020, 17:25
Ein Experte ist ein Delphi-Package, das in die IDE eingebunden wird (wie jedes beliebige andere Package auch, Package erstellen, kompilieren, installieren).

Bei einem Experten, der auf das Ereignis BeforeCompile reagiert, musst Du "nur" den Experten nach Deinen Wünschen erstellen. Beim Kompilieren ruft die IDE den automatisch immer auf. Du hast also genau einmal Arbeit nach Deinen Wünschen zu erledigen.
Du schreibst bei 'nem Experten letztlich nix weiter, als ein Delphiplugin, mit allen Dir in Delphi zur Verfügung stehenden Möglichkeiten, mit dem Du Dir Deine IDE selbst nach Deinen Wünschen erweiterst.

Ein Script ist 'ne Batchdatei, ein VB-Script, ein was auch immer, dass Du selbst aufrufen musst oder halt irgendwie in Deinen Buildprozess integrieren musst.

Ein Experte hat aber den Vorteil, er kennt das zu kompilierende Projekt und hält eine nicht unerhebliche Anzahl von Informationen vor, an die Du per Batch, VB-Script, ... niemals herankommst. Der Experte "weiß" quasi alles vom Projekt, was Delphi (also die IDE) auch weiß. Versionsinfos des Projektes, Dateinamen, Quelltexte, Informationen über sich selbst ...

Zitat:
Ich frage mal blöd, gibt es da eigentlich nichts Fertiges auf das man Aufbauen kann ?
Was meinst Du damit?

Bist Du mal den oben von mir verlinkten Suchergebnissen gefolgt?

Da solltest Du Experten finden, die Du nach Deinen Wünschen selbst anpassen kannst.

Ein Muster für 'nen BeforeCompile-Experten ist auch dabei. Du musst halt nur dort, wo die Batchdatei erstellt wird, eine Include-Datei erstellen, die Du nach Deinen Wünschen befüllst. Die musst Du halt per {$I Dateiname} in die dpr (oder sonst eine von Dir gewünschte Quelltextdatei) einbinden und der Kompiler berücksichtigt automatisch den Inhalt, da die Include ja letztlich nix weiter als ein Stück Quelltext des Programmes ist.

Den Aufruf der Batchdatei per ShellExecute aus dem Experten schmeißt Du raus. Damit sollte das Problem dann eigentlich gelöst sein.
Aufwand: Vermutlich weniger, als die bisherige Recherchearbeit zur Suche nach einer Lösung
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script)

  Alt 29. Apr 2020, 17:36
Für "Delphi-Version: 5"?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script)

  Alt 29. Apr 2020, 17:40
Die 5 steht doch immer da, wenn man nix angibt. Dürfte wohl eher die Version aus dem Userprofil sein, die da "Delphi 10.3 Rio" ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script)

  Alt 29. Apr 2020, 17:46
Der Experte hat den Vorteil, dass es während der Arbeit direkt in der IDE und in geöffneten Dateien Änderungen vornehmen kann.

Das PreCompileScript hat es da etwas schwerer, auch wenn es dort ebenfalls mehrere Umgebungsvariablen gibt, die was über das Projekt aussagen.
Zusätzlich steht Dieses in der DPROJ, wobei die DPROJ auch wiederrum ein XML-BuildScript ist, welches z.B. von MSBuild verstanden wird und somit das PreCompileScript dort auch ausgeführt wird.



Jemand hatte mal einen PreCompiler für delphi geschrieben, wo man sowas machen konnt, aber seit der neuen IDE nach Delphi 7 sind die Zugangspunkte weg, wo er sich damals reingehäckt hatte.
So Dinge wie Precompiler, Makros usw. hatten sich schon viele gewünscht, aber leider gibt es das nicht für Pascal ... nur im C++Builder.
https://www.delphipraxis.net/59965-s...__-delphi.html
http://docwiki.embarcadero.com/RADSt...inierte_Makros

Im C++Builder kann man auch PAS-Units einbinden, aber andersrum bekommt man keine C/H ins Pascal rein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Apr 2020 um 17:53 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#10

AW: Zugriff auf Environmental-Variablen mit compiler directives (Pre-Compile-Script)

  Alt 29. Apr 2020, 18:21
Sorry Delphi.Narium, hab mich wohl etwas unklar ausgedrückt.
Ich weiss wohl was Experte und Script sind.

Meine Vermutung hat himitsu ja gerade bestätigt.
Heisst wohl das bei Skripten muss man vorher "Save all" Drücken, was ich sowieso immer mache.
Das Problem kommt eben dann wenn man es doch mal vergisst, da ist der Experte schon sicherer.
(ich meine aber es gibt auch eine IDE-Aktion Save before build, oder so ähnlich, das würde dann helfen).

Eigentlich wollte ich für sowas nicht unbedingt Experten einsetzen, sondern eher die Pre-Build Scripte.
Im Wesentlichen weil ich nicht sicher bin ob die Experten auch in einer CI Umgebung richtig laufen würden.

Bei Skripten kann man sich bei irgendwelchen Problemen selber behelfen.

Aber danke für die Beschreibung, werde mir mal so einen Experten genauer ansehen.

Mit "etwas Fertiges" meinte ich ein Tool für genau so einen Fall.
Solche Pre-Compiler Wünsche müsste doch fast jeder IDE-Nutzer haben.
Kann ja sein das etwas im CnPack, GExperts oder ähnlichem was versteckt ist,
aber ich bin mit der Installation solcher Packages generell immer etwas (über)-vorsichtig.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz