Datum / Version im Dateinamen
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Datum / Version im Dateinamen
Ist es möglich, in den Projekteinstellungen / Compilereinstellungen bei Ziel-Dateiname (Option -o) einen Platzhalter anzugeben, so dass das aktuelle Datum oder eine Versionsnummer an den Dateinamen angefügt wird?
Also statt myprog.exe dann myprog_200816.exe oder statt avrprog.hex dann avrprog_200816.hex.
Es gibt ja Platzhalter wie $(TargetOS), gibt es das auch für Datum?
Also statt myprog.exe dann myprog_200816.exe oder statt avrprog.hex dann avrprog_200816.hex.
Es gibt ja Platzhalter wie $(TargetOS), gibt es das auch für Datum?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1646
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Datum / Version im Dateinamen
Man könnte Env(Variablenname) verwenden. Dazu müsste man z.B. in .bashrc eine entsprechende Variable setzen.
-
- Lazarusforum e. V.
- Beiträge: 3178
- 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: Datum / Version im Dateinamen
Im Wiki konnte ich kein passendes Macro finden. Man kann sich aber recht einfach eigene Macros erstellen:
Und schon habe ich ein Programm mit dem Dateinamen "2020-12-37_project1.exe".
- Neues Package erstellen
- Package als Entwicklungspackage in den Einstellungen markieren (nur Laufzeit geht nicht; muss in die IDE installiert werden)
- IDEIntf als Abhängigkeit eintragen
- Unit im Package anlegen
- Im Packageinspektro die Unit mit der Checkbox "Registriere Unit" markieren
- Code unten übernehmen, ggf. Unit-Namen anpassen
- Package in die IDE installieren
- Macro in den Projektoptionen verwenden, z.B. im Feld Zieldateiname: "$date()_project1"
Code: Alles auswählen
unit datemacro.macros;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, MacroDefIntf, MacroIntf;
type
{ TDateMacro }
TDateMacro = class
private
fInstance: TDateMacro; static;
public
// Macro Funktion
function MF_date(const s: string; const Data: PtrInt;
var Abort: boolean): string ;
constructor Create;
class function Instance: TDateMacro;
Class procedure DoneInstance;
end;
procedure Register;
implementation
procedure Register;
var
m: TDateMacro;
begin
// Macros dürfen erst in der Register-Prozedur erstellt werden
// Das Registrieren der Macros im Initialization-Abschnitt führt zu
// einer Endlosschleife
m := TDateMacro.Instance;
end;
{ TDateMacro }
function TDateMacro.MF_date(const s: string; const Data: PtrInt;
var Abort: boolean): string;
begin
Result := FormatDateTime('YYYY-HH-DD', now());
Abort := False;
end;
constructor TDateMacro.Create;
begin
IDEMacros.Add(TTransferMacro.Create(
'date', // Das ist der Macroname
'',
'Returns the current date in Format YYYY-HH-MM',
@MF_date,
[])
);
end;
class function TDateMacro.Instance: TDateMacro;
begin
fInstance := TDateMacro.Create;
Result := fInstance;
end;
class procedure TDateMacro.DoneInstance;
begin
FreeAndNil(fInstance);
end;
finalization
TDateMacro.DoneInstance;
end.
Zuletzt geändert von Socke am Fr 21. Aug 2020, 07:11, insgesamt 3-mal geändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1646
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Datum / Version im Dateinamen
Coole Sache,
das kannte ich noch gar nicht. Aber ich glaube ein kleiner Fehler ist noch da drin:
heissen?
das kannte ich noch gar nicht. Aber ich glaube ein kleiner Fehler ist noch da drin:
Muss das nichtSocke hat geschrieben: Do 20. Aug 2020, 12:38
class function TDateMacro.Instance: TDateMacro;
begin
fInstance := TDateMacro.Create;
end;
Code: Alles auswählen
class function TDateMacro.Instance: TDateMacro;
begin
fInstance := TDateMacro.Create;
Result := fInstance;
end;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1646
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Datum / Version im Dateinamen
Ich habe grad mal im Wiki nachgeschaut. Ich finde, diese Möglichkeit sich einfach selbst Macros erstellen zu können, sollte da mit rein.
-
- Lazarusforum e. V.
- Beiträge: 3178
- 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: Datum / Version im Dateinamen
Im Prinzip ja, damit das Singleton korrekt funktioniert. Da in der Macrofunktion keine Daten des lokalen Objekts abruft, funktioniert das auch so.fliegermichl hat geschrieben: Do 20. Aug 2020, 12:50 Coole Sache,
das kannte ich noch gar nicht. Aber ich glaube ein kleiner Fehler ist noch da drin:
Ich korrigier mal meinen Post.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 608
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Datum / Version im Dateinamen
Hallo Socke,
vielen Dank für das Beispiel. Ich habe es eben mal probiert und dank deiner Anleitung auch hinbekommen.
Über folgende Kleinigkeiten bin ich etwas gestolpert:
Ich musste bei mir zusätzlich noch das Package IDEIntf einbinden.
Und die Zeile
liefert das Jahr-die Stunde-die Minute.
Ich habe es geändert in
das liefert Jahr-Monat-Tag
Jetzt das Interessant daran:
Anschließend habe ich dann versucht noch die Zeit anzuhängen:
Hier wurde zwar die Datei wie erwartet erzeugt, jedoch konnte Lazarus die kompilierte Datei nicht mehr öffnen. Hat ein Stück gedauert bis ich begriffen habe warum. In der Zeit vom Erzeugen der ausführbaren Datei bis zum Öffnen hat sich das Ergebnis des Makros geändert weil 3 Sekunden vergangen waren und somit die Dateinamen nicht mehr übereinstimmen.
Nur so als Info an alle die auch damit herum probieren.
Viele Grüße
Bernd
vielen Dank für das Beispiel. Ich habe es eben mal probiert und dank deiner Anleitung auch hinbekommen.
Über folgende Kleinigkeiten bin ich etwas gestolpert:
Ich musste bei mir zusätzlich noch das Package IDEIntf einbinden.
Und die Zeile
Code: Alles auswählen
Result := FormatDateTime('YYYY-HH-MM', now());
Ich habe es geändert in
Code: Alles auswählen
Result := FormatDateTime('YYYY-MM-DD', now());
Jetzt das Interessant daran:
Anschließend habe ich dann versucht noch die Zeit anzuhängen:
Code: Alles auswählen
Result := FormatDateTime('YYYY-MM-DD_hh-mm-ss', now());
Nur so als Info an alle die auch damit herum probieren.
Viele Grüße
Bernd
-
- Lazarusforum e. V.
- Beiträge: 3178
- 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: Datum / Version im Dateinamen
Vollkommen richtig; das habe ich offenbar auf dem Weg von Lazarus zum Browser vergessen.wennerer hat geschrieben: Do 20. Aug 2020, 22:04Ich musste bei mir zusätzlich noch das Package IDEIntf einbinden.
Ich muss jedesmal die Zeichen nachschauen, aber das ist offensichtlich besser so. Beides habe ich oben korrigiert.wennerer hat geschrieben: Do 20. Aug 2020, 22:04 Und die Zeileliefert das Jahr-die Stunde-die Minute.Code: Alles auswählen
Result := FormatDateTime('YYYY-HH-MM', now());
Ich habe es geändert indas liefert Jahr-Monat-TagCode: Alles auswählen
Result := FormatDateTime('YYYY-MM-DD', now());
Ich würde das als Bug betrachten: Lazarus sollte die Macros nur einmal auswerten und bis zum nächsten Kompilieren zwischenspeichern. Alternativ müsste die Macrofunktion das selbst machen.wennerer hat geschrieben: Do 20. Aug 2020, 22:04 Hier wurde zwar die Datei wie erwartet erzeugt, jedoch konnte Lazarus die kompilierte Datei nicht mehr öffnen. Hat ein Stück gedauert bis ich begriffen habe warum. In der Zeit vom Erzeugen der ausführbaren Datei bis zum Öffnen hat sich das Ergebnis des Makros geändert weil 3 Sekunden vergangen waren und somit die Dateinamen nicht mehr übereinstimmen.
Nur so als Info an alle die auch damit herum probieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein