Error: Error: malformed parameter: -dMEINEDEF

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
thosch
Beiträge: 193
Registriert: Mo 10. Jul 2017, 20:32

Error: Error: malformed parameter: -dMEINEDEF

Beitrag von thosch »

Was hat es damit auf sich. Wie kann ich meine eigene Definition für eine bedingte Übersetzung hinzufügen?

Ein Teil meiner extrafpc.cfg sieht so aus:

Code: Alles auswählen

 
# Your options are:
#  -dX11             for X11 support (eg: Linux or FreeBSD)
#  -dGDI             for Windows GDI support
   -dMEINEDEF    #wird als fehlerhaft vom Compiler abgewiesen! Warum?
 


Warum wird meine eigene Definition abgewiesen?

Wie füge ich da meine eigene Definitiion ein?

.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 586
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.7 FPC 3.04)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Error: Error: malformed parameter: -dMEINEDEF

Beitrag von fliegermichl »

Vermutlich stört er sich an den führenden Leerzeichen

thosch
Beiträge: 193
Registriert: Mo 10. Jul 2017, 20:32

Re: Error: Error: malformed parameter: -dMEINEDEF

Beitrag von thosch »

Nein, das ist leider nicht die Ursache. Es muss ein anderes Problem geben.

Wenn ich mein Symbol auf der Kommandozeile definiere und dann in der extrafpc.cfg mit

Code: Alles auswählen

 
IFDEF <meinedef>
ENDIF
 


abfrage, tritt dort der gleiche Fehler auf, wobei als Fehler meine IFDEF Zeile angezeigt wird.

Wie also muss ich mein Symbol so auf der Kommandozeile oder in der extrafpc.cfg definieren, damit der Compiler mein Symbol anerkennt.

wp_xyz
Beiträge: 3256
Registriert: Fr 8. Apr 2011, 09:01

Re: Error: Error: malformed parameter: -dMEINEDEF

Beitrag von wp_xyz »

Warum steckst du das in extrafpc.cfg und nicht ins Projekt? "Projekt" > "Projekteinstellungen" > "Compilereinstellungen" > "Benutzerdefinierte Einstellungen" > "Definitionen" > MEINEDEF in "Definition" eintragen > "Hinzufügen" > Checkbox darunter zum Aktivieren/Deaktivieren der Definition.

Oder, wenn es nur in einer Unit benötigt wird mit {$DEFINE MEINEDEF} deklarieren.

Im Quelltext wird mit {$IFDEF MEINEDEF} auf die Direktive zugegriffen:

Code: Alles auswählen

{$IFDEF MEINEDEF}
  ShowMessage('Dies wird nur angezeigt, wenn "MEINEDEF" aktiv ist');
{$ELSE}
  ShowMessage('Dies wird angezeigt, weil "MEINEDEF" nicht aktiv ist');
{$ENDIF}

charlytango
Beiträge: 192
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0fixes FPC 3.2fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Error: Error: malformed parameter: -dMEINEDEF

Beitrag von charlytango »

Meine Erfahrungen mit externen cfg-Dateien habe ich hier https://www.lazarusforum.de/viewtopic.php?f=10&t=12567 nachgefragt, leider auch damals ohne wirklichen Erfolg.
Eine Bugmeldung https://bugs.freepascal.org/view.php?id=36386 blieb bisher unbearbeitet.

Ich kann bestätigen dass die Variante von wp_xyz funktioniert.

Trotzdem würde ich gerne meine globalen Defines in einer eigenen Datei halten die ich auch versionieren kann. Ausführliche Beschreibungen zu den Defines lassen sich in einer Datei leicht machen. Sie lässt sich für neue Projekte IMHo auch leichter verwalten als jedes einzelne Define neu einzugeben oder in den Lazarus-Konfigurationsdateien rumzufummeln.

Aber vermutlich bin ich der einzige der so denkt ;)
Nur sollte man dann auch die Möglichkeit der Einbindung einer eigenen cfg-Datei aus der IDE rausnehmen. Wenn es denn angeboten wird sollte es dann auch funktionieren.

wp_xyz
Beiträge: 3256
Registriert: Fr 8. Apr 2011, 09:01

Re: Error: Error: malformed parameter: -dMEINEDEF

Beitrag von wp_xyz »

charlytango hat geschrieben:Trotzdem würde ich gerne meine globalen Defines in einer eigenen Datei halten die ich auch versionieren kann. Ausführliche Beschreibungen zu den Defines lassen sich in einer Datei leicht machen. Sie lässt sich für neue Projekte IMHo auch leichter verwalten als jedes einzelne Define neu einzugeben oder in den Lazarus-Konfigurationsdateien rumzufummeln.

Wiegesagt, mit extrafpc.cfg habe ich keine Erfahrung. Wenn ich in einem Projekt unit-übergreifende Defines benötige, schreibe ich mir eine include-Datei, die dann am Beginn jeder entsprechenden Unit per {$I include-datei.inc} eingebunden werden muss. In der Include-Datei werden Defines wie oben erwähnt per {$DEFINE ...} deklariert. Die Unit kann natürlich in die Versionskontrolle aufgenommen und - wenn sie entsprechend allgemein ist - von Projekt zu Projekt weiterkopiert werden. Und natürlich kann man für die einzelnen Einträge auch Kommentare hinterlegen.

Hier ein Beispiel aus meinem fpexif package:

Code: Alles auswählen

{$IFDEF FPC}
  {------------------------------------------------------------------
    Defines for Lanzarus and FPC
  ------------------------------------------------------------------}

  ////// { Activate this define if an FPC version of at least 3.0 is used. }
  { This define signals that an FPC version >= 3.0 is used }
  {$DEFINE FPC3+}
  {$I fpexif_fpc.inc}
 
  // Don't use jpeg units
  {$DEFINE dExifNoJpeg}
 
{$ELSE}
  {------------------------------------------------------------------
   Defines for Delphi
  ------------------------------------------------------------------}

  {$UNDEF FPC3+}
 
  { Activate this define if a library other than Delphi's jpeg is
    used for reading of jpeg files.
    Is active by default for Lazarus/FPC }

  {.$DEFINE dEXIFNoJpeg}
 
  { Activate the define ENDIAN_BIG if working on a Big-Endian machine }
  {.$DEFINE ENDIAN_BIG}
 
  { I did not test all Delphi versions. Extend the list if needed... }
  {$IFDEF VER150}
    {$DEFINE DELPHI7}
  {$ENDIF} 
 
{$ENDIF}

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 586
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.7 FPC 3.04)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Error: Error: malformed parameter: -dMEINEDEF

Beitrag von fliegermichl »

wp_xyz hat geschrieben: ... Die Unit kann natürlich in die Versionskontrolle aufgenommen und - wenn sie entsprechend allgemein ist - von Projekt zu Projekt weiterkopiert werden. Und natürlich kann man für die einzelnen Einträge auch Kommentare hinterlegen.


Aber aufpassen! In Lazarus müssen Dateinamen systemweit eindeutig sein. Ich hatte mir mal den Wolf gesucht weil ich zwei gleichnamige Dateien hatte (config.inc) Die eine in einem meiner Packages, die andere in einem Projekt. Das hat Fehlermeldungen ohne Ende gehagelt und finde die Ursache dafür erst mal.

Antworten