Verzeichnisstruktur und Suchpfade

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Verzeichnisstruktur und Suchpfade

Beitrag von braunbär »

Nachdem ich jetzt die Lazarus 1.8.0RC3 installiert habe, wollte ich das zum Anlaß nehmen, um meinen Code und meine Verzeichnisse besser zu organisieren als ganz zu Beginn, bei meinen allerersten Schritten mit Lazarus.

Ich habe also als erstes ein Laufzeit-Package tools erstellt, in das ich nach und nach alle meine projektübergreifenden "Support-Units" integrieren möchte.
Bloß scheitert da schon der allererste Schritt: Beim Versuch, die erste unit fdtools.pas als Teil eines mit Default-Werten neu erstellten Package tools zu compilieren, bekomme ich die Fehlermeldung:

Kompiliere Package Tools 0.0: Exit code 1, Fehler: 1
fdTools.pas(5,42) Fatal: Kann Forms nicht finden verwendet von fdTools. Stellen Sie sicher, daß alle .ppu-Dateien eines Packages sich in dessem Ausgabeverzeichnis befinden. ppu im falschen Verzeichnis=C:\lazarus\lcl\units\i386-win32\forms.ppu. Package "LCLBase" aufräumen..


Mit der Fehlermeldung kann ich nichts anfangen. Was muss ich wo umstellen, damit die Original-Lazarus- bzw. FPC-Units auch beim Kompilieren eines Package dort gefunden werden, wo sie defaultmässig liegen. Ich möchte aber das Ausgabeverzeichnis für meine compilierten Units nicht auf das gleiche Verzeichnis einstellen, in dem sich die Units von FPC, LCL etc. befinden.

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

Re: Verzeichnisstruktur und Suchpfade

Beitrag von wp_xyz »

Du musst alle Packages, die dein Package verwendet, unter "Required Packages"/"Benötigte Packages" deines Packages auffinden. Nachdem du von Delphi kommst, ist vielleich auch der Hinweise angebracht, dass du in der Regel keine Pfade zu anderen Packages setzen darfst - diese sind der IDE schon bekannt und machen nur Probleme, wenn Units mehrfach übersetzt werden. Falls du LCL-freie Units hast, wäre zu überlegen, ein eigenes Package dafür vorzuschalten. Lazarus hat z.B. LazUtils, in dem alle nicht-LCL-spezifischen Units enthalten sind. Dieses wird dann wiederrum von der LCL angefordert.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Verzeichnisstruktur und Suchpfade

Beitrag von braunbär »

Danke!
Aber gibt es dann irgendwo eine Übersicht, welche Units in welchen Packages enthalten sind?
Ich habe zwar diese Seite gefunden, auf der die Package Struktur dokumentiert ist, aber damit allein wäre es extrem mühsam, das richtige Package zu einer Unit zu finden.

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

Re: Verzeichnisstruktur und Suchpfade

Beitrag von wp_xyz »

Du kannst die Unit in den Editor laden und dann mit Hilfe von "Package" > "Package der aktuellen Unit öffnen" das zugehörige Package öffnen.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Verzeichnisstruktur und Suchpfade

Beitrag von braunbär »

Ok, danke.
Das ist zwar nicht wirklich komfortabel, aber es ist zumindest ein halbwegs gangbarer Weg.
Eigentlich sollte bei der Dokumentation jeder Unit die Information inkludiert sein, zu welchem Package sie gehört.

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: Verzeichnisstruktur und Suchpfade

Beitrag von af0815 »

Wenn ich eine unit geöffnet habe, so sehe ich anhand der Editors zu welchen File die gehört. Zumindest damit ist mir klar, zu welchen Package die Unit gehört. Wenn ich wissen will wo sich die Packages befinden, bzw. welches verwendet wird, so kann ich das ja im Menü unter Packages > Package Links.. mir ausgeben lassen. Die Liste ist IMHO auch interessant, was man eigentlich so alles installiert hat.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Verzeichnisstruktur und Suchpfade

Beitrag von braunbär »

af0815 hat geschrieben:Wenn ich eine unit geöffnet habe, so sehe ich anhand der Editors zu welchen File die gehört. Zumindest damit ist mir klar, zu welchen Package die Unit gehört.

Wie erkennst du am Filenamen, zu welchem Package die Unit gehört? So viel ich weiß, müssen doch Unitname und Filename sogar übereinstimmen, oder ist das bei Lazarus nicht der Fall?

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: Verzeichnisstruktur und Suchpfade

Beitrag von af0815 »

braunbär hat geschrieben:Wie erkennst du am Filenamen, zu welchem Package die Unit gehört? So viel ich weiß, müssen doch Unitname und Filename sogar übereinstimmen, oder ist das bei Lazarus nicht der Fall?

Nein, nicht am Filenamen, aber meistens ist das Package in der 'Nähe' der units. Ja die Namen sollten übereinstimmen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Verzeichnisstruktur und Suchpfade

Beitrag von wp_xyz »

braunbär hat geschrieben:Ok, danke.
Das ist zwar nicht wirklich komfortabel, aber es ist zumindest ein halbwegs gangbarer Weg.
Eigentlich sollte bei der Dokumentation jeder Unit die Information inkludiert sein, zu welchem Package sie gehört.


Hast du schon mal die Online-Hilfe von Lazarus/fpc verwendet? Da findest du sowas wie das hier: http://lazarus-ccr.sourceforge.net/docs/lcl/, und wenn du von einer Unit her kommst, findest du rechts oben den Namen des zugehörigen Package. ABER: wie mit jeder Dokumentation gibt es immer die Unsicherheit, dass sie nicht aktuell sein könnte. Die allerbeste Dokumentation ist immer noch der Quelltext selbst. Lazarus macht es sehr leicht, im Quelltext zu navigieren und sich die Informationen zusammenzusuchen.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Verzeichnisstruktur und Suchpfade

Beitrag von braunbär »

wp_xyz hat geschrieben:Da findest du sowas wie das hier: http://lazarus-ccr.sourceforge.net/docs/lcl/

Ich bin schon einmal auf die Seite gestoßen, aber jetzt habe ich mir einen Link auf http://lazarus-ccr.sourceforge.net/docs gespeichert. Aber wenn ich es richtig sehe, dürfte F1 in Lazarus auch auf die Seite (oder auf eine lokale Kopie) verzweigen, allerdings in einem Fenster, das nicht als Web-Browserseite erkennbar ist (ist vermutlich auch keiner).
Mir war nicht klar, dass die Units der LCL in einem einzigen Package "LCL" sitzen, und die anderen Packages offenbar nur für sehr spezifische Dinge nötig sind (deshalb war mir auch nicht klar, dass mit dem #LCL rechts oben offenbar der Package-Name gemeint ist). Das entschärft die Frage nach den Packages in der requires Klausel natürlich deutlich. :wink:

braunbär hat geschrieben:Eigentlich sollte bei der Dokumentation jeder Unit die Information inkludiert sein, zu welchem Package sie gehört.

Ist also ohnedies der Fall, zumindest für die RTL,LCL und FCL Packages - ich hatte das nur nicht richtig verstanden.

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

Re: Verzeichnisstruktur und Suchpfade

Beitrag von wp_xyz »

F1 (oder Ctrl-F1, wenn man wie ich mit dem klassichen Tastaturlayout arbeitet) sucht, wie man es erwartet, den Begriff, auf dem der Cursor steht und öffnet die entsprechende Hilfedatei in einem einfachen chm-Viewer, der bei der ersten Verwendung automatisch kompiliert wird (Notfalls musst du dir das Programm lhelp (in (lazarus)/components/chmhelp/lhelp) selbst kompilieren). lhelp hat noch ein paar Macken, ist aber seit seiner Geburtstunde schon um Klassen besser geworden.

Die dabei verwendeten Hilfe-Dateien stehen im Ordner (lazarus)/docs/chm. Da das Bauen dieser Dateien recht aufwendig ist, können sie schon mal veraltet sein, gerade die von fpc. Du kannst das aber jederzeit selbst machen, indem du die Batchdatei build_chm.bat bzw. Script-Datei build_chm.sh in (lazarus)/docs/html auf deine Verhältnisse anpasst und ausführst. Das dabei benötigte Programm build_lcl_docs musst du vorher selbst übersetzen. Achtung: Es dauert recht lang, bis das Script fertig ist, nicht ungeduldig werden.

LCL ist alles, was du in dem Quellverzeichnis (lazarus)/lcl findest, also alle Standard-Controls, die bei Delphi zur VCL gehören würden (in der Regel). Daneben gibt es aber noch eine Unmenge anderer Controls, die du in den Unterordnern von (Lazarus)/components findest. Nicht alle davon sind standardmäßig installiert, also über die Komponentenpalette verfügbar. Der HTML-Viewer, der im o.e. chm-Viewer enthalten ist, ist z.B. normalerweise installiert, der Datenbank-Reportgenerator lazreport dagegen nicht. Wenn da etwas fehlt, kannst du unter "Package" / "Install/uninstall packages" in der rechten Liste nachsehen, ob das gewünschte Package der IDE schon bekannt ist (leider sind die Namen immer etwas zu kryptisch, und die Entwickler schreiben nicht immer eine aussagekräftige Beschreibung ins vorgesehene Feld), und dann kannst du mit "Install selection" und "Save and rebuild IDE" das Package in die IDE einbauen. Wenn das Package in der rechte Liste fehlt, öffnest du "Package" > "Open package file" und suchst die zugehörige lkp-Datei: "Compile" und "Use" > "install", und nach dem Neubauen der IDE ist das Package mit seinen Komponenten verfügbar. Außerdem sollte ich noch auf den in Version 1.8 neuen Online-Package-Manager hinweisen, über den du auf fast 80 externe Komponentensammlungen zugriff hast. Ist selbsterklärend und supereinfach, nur muss man das Ding, nachdem es noch sehr neu ist, manuell wie oben erwähnt über "Install/uninstall packages" erst in die IDE einbauen, wo es dann im Menü "Packages" verfügbar ist.

Antworten