uses / in Parameter

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

uses / in Parameter

Beitrag von Mathias »

Code: Alles auswählen

uses
    Unit2 in 'Unit2.pas' ;
Für was ist der String hinter "in" gut.

Ich habe die Datei "Unit2.pas" in einen Unter/Ordner Test verschoben und folgendes probiert.

Code: Alles auswählen

uses
    Unit2 in 'test/Unit2.pas' ;
Lazarus kann die Unit trotzdem nicht finden.

Wen ich die "Unit2.pas im gleichen Ordner habe, und bei in eine Quatsch reinschreibe, wird das Prgram ohne Fehler kompiliert.

Code: Alles auswählen

uses
    Unit2 in 'ich bin ein Quatshch' ;
Oder ist das ganze ein Überbleibsel von Delphi ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: uses / in Parameter

Beitrag von theo »

Woher hast du das?
Afaik macht die Lazarus IDE das nicht.
Sieht so aus, als würde das einfach ignoriert.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: uses / in Parameter

Beitrag von Scotty »

Der FPC Referenz Guide [1] sagt nichts dazu, aber bei Gnu Pascal [2] gibt es einen Hinweis:

Code: Alles auswählen

The keyword in tells GPC to look for the unit in the specified file; otherwise the file name is derived from the name of the interface, coverted to lower-case, by adding first .p, then .pas. 
Wahrscheinlich wird der Quatsch aber zum Fehler, wenn man in irgendeinem anderen Modus [3] kompiliert.

[1] http://lazarus-ccr.sourceforge.net/fpcd ... 16600013.2
[2] http://www.gnu-pascal.de/gpc/uses.html
[3] http://www.freepascal.org/docs-html/user/userse33.html

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: uses / in Parameter

Beitrag von Patito »

In der Hilfe von Delphi 7 wird die in-Syntax einigermaßen ausführlich beschrieben.

Bei mir auf der Platte habe ich jetzt spontan keine einzige Unit finden können, die dieses Konstrukt verwendet.

Als Anwendungsfälle für die Syntax waren folgene gedacht:
1) Wenn man im Projekt 10 verschiedene Units verwendet, die alle Unit1 heißen, und sich nur durch den Pfad unterscheiden. (Für Leute mit Benennungs-Hemmung)
2) Man verwendet eine Unit, die nicht im Projekt und in keinem Suchpfad enthalten ist (ein Osterei)
3) Man Verwendet eine Unit, die anders heißt als ihr File-Name (ein verstecktes Osterei)

Eine Syntax zum Spaghetti kochen, die man am besten eliminiert...

P.S: Ich beziehe mich hier auf die Syntax der uses-clause einer Pascal-Unit...
Im Projekten, Packages, etc benötigt man natürlich manchmal den Pfad...

Socke
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: uses / in Parameter

Beitrag von Socke »

AFAIK wird das vom FPC nur soweit unterstützt, als dass es ignoriert wird. Um die Pfade zu den Units anzugeben, müssen die Pfade in den Compiler- Projekt- und Packageeinstellungen verwendet werden. Wenn es mehrere Units mit dem gleichen Namen gibt, wird vom Compiler eine Warnmeldung ausgegeben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: uses / in Parameter

Beitrag von mischi »

Socke hat geschrieben:AFAIK wird das vom FPC nur soweit unterstützt, als dass es ignoriert wird. Um die Pfade zu den Units anzugeben, müssen die Pfade in den Compiler- Projekt- und Packageeinstellungen verwendet werden. Wenn es mehrere Units mit dem gleichen Namen gibt, wird vom Compiler eine Warnmeldung ausgegeben.
Ich fürchte, dass da einiges durcheinander geht.

1. fpc hat selbst keine Compiler- Projekt- und Packageeinstellungen. Die gibt es nur in Lazarus.

2. Nach meinen Erfahrungen mit Ultrastar Deluxe beachtet fpc sehr wohl solche Pfadangaben. Gemäß der Dokumentation (http://www.freepascal.org/docs-html/ref ... 21100016.1) muss man dazu auch nicht den Delphi mode einschalten. In UltraStar Deluxe wird das zum Beispiel dazu benutzt, um mit dem Ergebnis eines ./configure Laufs zwischen verschiedenen Versionen von ffmpeg zu unterscheiden und die ffmpeg header aus dem entsprechenden Verzeichnis zu nehmen.

3. Wenn die Unit irgendwo steht, wo fpc von sich aus nachschaut, z.B. im selben Verzeichnis wie das Hauptprogramm, dann kann im Pfad auch Quatsch stehen, ohne dass es einen Fehler gibt.

Grüße - MiSchi
MiSchi macht die fink-Pakete

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: uses / in Parameter

Beitrag von Patito »

mischi hat geschrieben:
Socke hat geschrieben:AFAIK wird das vom FPC nur soweit unterstützt, als dass es ignoriert wird. Um die Pfade zu den Units anzugeben, müssen die Pfade in den Compiler- Projekt- und Packageeinstellungen verwendet werden. Wenn es mehrere Units mit dem gleichen Namen gibt, wird vom Compiler eine Warnmeldung ausgegeben.
Ich fürchte, dass da einiges durcheinander geht.

1. fpc hat selbst keine Compiler- Projekt- und Packageeinstellungen. Die gibt es nur in Lazarus.

2. Nach meinen Erfahrungen mit Ultrastar Deluxe beachtet fpc sehr wohl solche Pfadangaben. Gemäß der Dokumentation (http://www.freepascal.org/docs-html/ref ... 21100016.1) muss man dazu auch nicht den Delphi mode einschalten. In UltraStar Deluxe wird das zum Beispiel dazu benutzt, um mit dem Ergebnis eines ./configure Laufs zwischen verschiedenen Versionen von ffmpeg zu unterscheiden und die ffmpeg header aus dem entsprechenden Verzeichnis zu nehmen.
Du beziehst Dich auf Anwendungen?

Code: Alles auswählen

 
program Test;
 
uses
  Unit1 in '..\..\Unit1.pas';
 
begin
  //...
end.
 
damit gibt es auch kein Problem.

Das Problem ist so etwas:

Code: Alles auswählen

 
unit TestFPC;
 
interface
 
uses
  Classes in 'asdfölkajsdöflkja', SysUtils,
  Forms;
 
implementation
 
end.
 
FPC schluckt sowas kommentarlos. Ist zwar nicht schlimm, aber durchaus seltsam.

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: uses / in Parameter

Beitrag von Mathias »

Dies währe fast eine Bug-Meldung wert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
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: uses / in Parameter

Beitrag von Socke »

mischi hat geschrieben:
Socke hat geschrieben:AFAIK wird das vom FPC nur soweit unterstützt, als dass es ignoriert wird. Um die Pfade zu den Units anzugeben, müssen die Pfade in den Compiler- Projekt- und Packageeinstellungen verwendet werden. Wenn es mehrere Units mit dem gleichen Namen gibt, wird vom Compiler eine Warnmeldung ausgegeben.
Ich fürchte, dass da einiges durcheinander geht.

1. fpc hat selbst keine Compiler- Projekt- und Packageeinstellungen. Die gibt es nur in Lazarus.
Irgendwie muss man dem Compiler doch Einstellungen mitteilen. Die Compilereinstellungen kann man entweder über eine Konfigurationsdatei oder als Parameter beim Programmaufruf vornehmen. Wenn ich eine Unit verwenden möchte, kann ich den Ort also an mehreren verschiedenen Stellen hinterlegen - je nachdem ob ich Lazarus nutze oder nicht, kann ich dort auf die Dialoge zurückgreifen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: uses / in Parameter

Beitrag von mischi »

Patito hat geschrieben:Du beziehst Dich auf Anwendungen?

Code: Alles auswählen

 
unit TestFPC;
 
interface
 
uses
  Classes in 'asdfölkajsdöflkja', SysUtils,
  Forms;
 
implementation
 
end.
 
FPC schluckt sowas kommentarlos. Ist zwar nicht schlimm, aber durchaus seltsam.
OK. Jetzt habe auch ich das Problem kapiert. Hab ich völlig übersehen, dass um Units geht und nicht um ein Program.

Seltsam finde ich das nicht so sehr, weil er eben classes.ppu in den üblichen Pfaden findet und gar nicht in "asdfölkajsdöflkja" suchen muss. Naja, eine Warnung oder einen Hint, dass der Pfad gar nicht existiert, wäre schon nicht schlecht.

MiSchi
MiSchi macht die fink-Pakete

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: uses / in Parameter

Beitrag von mischi »

Socke hat geschrieben:Irgendwie muss man dem Compiler doch Einstellungen mitteilen. Die Compilereinstellungen kann man entweder über eine Konfigurationsdatei oder als Parameter beim Programmaufruf vornehmen. Wenn ich eine Unit verwenden möchte, kann ich den Ort also an mehreren verschiedenen Stellen hinterlegen - je nachdem ob ich Lazarus nutze oder nicht, kann ich dort auf die Dialoge zurückgreifen.
Volle Zustimmung. Ich fand nur das andere für Anfänger nicht ganz klar, weil die oft Schwierigkeiten haben, Compiler und IDE auseinander zu halten.

MiSchi.
MiSchi macht die fink-Pakete

Antworten