Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lazarus Unit einbinden, wie? (https://www.delphipraxis.net/167601-lazarus-unit-einbinden-wie.html)

Codix32 8. Apr 2012 15:31

Lazarus Unit einbinden, wie?
 
Hallo Leute,

ich versuche gerade in Lazarus eine Unit mit in Delphi erstellten eigenen Funktionen in die Hauptunit einzubinden.

Aber wie geht das? Eine option wie bei Delphi unter DATEI-> Unit einbinden gibt es nicht.
Habe ichs also so versucht:
Delphi-Quellcode:
var
  Form1: TForm1;


implementation

{$R *.lfm}

uses eigeneDatumsroutinen;


end.
Geht aber nicht. Ich kriege die Meldung:
Unit "eigeneDatumsroutinen" not used in Unit1

implementation 8. Apr 2012 15:35

AW: Lazarus Unit einbinden, wie?
 
Zitat:

Zitat von Codix32 (Beitrag 1160756)
Aber wie geht das? Eine option wie bei Delphi unter DATEI-> Unit einbinden gibt es nicht.

Die Uses-Klausel findet man doch wohl auch ohne Menüpunkt ;)

Zitat:

Unit "eigeneDatumsroutinen" not used in Unit1
Klingt eher nach einem Überflüssigkeits-Hinweis als nach einem Fehler :gruebel:

Codix32 8. Apr 2012 15:45

AW: Lazarus Unit einbinden, wie?
 
Zitat:

Zitat von implementation (Beitrag 1160757)
Zitat:

Zitat von Codix32 (Beitrag 1160756)
Aber wie geht das? Eine option wie bei Delphi unter DATEI-> Unit einbinden gibt es nicht.

Die Uses-Klausel findet man doch wohl auch ohne Menüpunkt ;)

Zitat:

Unit "eigeneDatumsroutinen" not used in Unit1
Klingt eher nach einem Überflüssigkeits-Hinweis als nach einem Fehler :gruebel:

Ok, jetzt nachdem ich einen TButton drauf habe und eine simple Funktion aus der Unit
im Button aufrufe, funktioniert es.

Aber was, wenn die Unit in einem anderen Ordner liegen soll?

Muß ich denn den Pfad mit eingeben?

Das funzt jetzt:
Delphi-Quellcode:
var
  Form1: TForm1;


implementation

{$R *.lfm}

uses eigeneDatumsroutinen;


{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  button1.caption:=TagdesJahres; //<- Funktion liegt in 'eigeneDatumsroutinen.pas
end;

implementation 8. Apr 2012 19:53

AW: Lazarus Unit einbinden, wie?
 
Zitat:

Zitat von Codix32 (Beitrag 1160758)
Aber was, wenn die Unit in einem anderen Ordner liegen soll?

Muß ich denn den Pfad mit eingeben?

Wie in Delphi auch: Du fügst den Pfad den Suchpfaden hinzu. In Lazarus gehst du auf Projekt->Compilereinstellungen, bzw. wenn du den Compiler direkt über die Kommandozeile aufrufst, hängst du den Parameter -FuX:\Dein\Pfad an.
Alternativ gibt's da noch die Möglichkeit, den Pfad direkt in der uses-Klausel mit
Delphi-Quellcode:
in
anzugeben, aber das sollte man sich besser gar nicht erst angewöhnen ;)

jaenicke 8. Apr 2012 20:38

AW: Lazarus Unit einbinden, wie?
 
Zitat:

Zitat von implementation (Beitrag 1160781)
Alternativ gibt's da noch die Möglichkeit, den Pfad direkt in der uses-Klausel mit
Delphi-Quellcode:
in
anzugeben, aber das sollte man sich besser gar nicht erst angewöhnen ;)

Warum? Die Kompilierzeit ist insbesondere bei größeren Projekten deutlich geringer (zumindest bei Delphi, aber das dürfte bei Lazarus kaum anders sein), zudem brauche ich so nur auschecken und kann direkt kompilieren ohne tausend Pfade einzutragen.

Deshalb sehe ich eigentlich keinen Vorteil darin die Units nicht ins Projekt einzubinden und stattdessen die Suchpfade umständlich vollzupflastern. Welchen siehst du denn?

himitsu 8. Apr 2012 20:49

AW: Lazarus Unit einbinden, wie?
 
Wennn die Dateien ausschließlich zu diesem Projekt gehören, dann gehören sie auch in die Projektdatei. (mit IN, wie man hier so schön sagt)
Damit kann man auch über die Projektverwaltung und übers IDE-Insight (F6) schön einfach zu diesen Units springen.

Währe ja auch blöd. wenn die Suchpfade mit projektspezifischen Dingen vollgemüllt würden.

Außerdem kann man diese Projekte dann nicht mehr so einfach verschieben (anderes Verzeichnis oder Rechner), da sie an feste Pfade gebunden sind.

jaenicke 8. Apr 2012 21:34

AW: Lazarus Unit einbinden, wie?
 
Zitat:

Zitat von himitsu (Beitrag 1160788)
Damit kann man auch über die Projektverwaltung

Ich bin bis eben davon ausgegangen, dass es sowas auch bei Lazarus gibt. Dort ist das jedoch nur eine Liste und nennt sich Projektinspektor. :shock:
In der Form macht es allerdings weniger Sinn viele Units direkt einzubinden, da verstehe ich den Einwand von implementation... Lazarus ist halt eher für kleine Hobby-Projekte ausgelegt wie man an solchen Sachen eindrucksvoll bewiesen bekommt...

Zitat:

Zitat von himitsu (Beitrag 1160788)
Wennn die Dateien ausschließlich zu diesem Projekt gehören, dann gehören sie auch in die Projektdatei. (mit IN, wie man hier so schön sagt)

Ich habe auch Units, die nicht zum Projekt gehören (gemeinsam genutzte Units eben), aber im selben Repository liegen, direkt dem Projekt hinzugefügt.
Die Baumstruktur in der Projektverwaltung von Delphi erlaubt so eine sehr einfache Verwaltung der benutzten Units der verschiedenen Projekte der Projektgruppe. Für Lazarus gilt das wie schon geschrieben aber nicht.

implementation 8. Apr 2012 22:57

AW: Lazarus Unit einbinden, wie?
 
Ich seh schon, hier scheiden sich wieder Delphisten und Make-Schubser mit vollkommen verschiedenen Grundauffassungen :lol:
Insofern ziehe ich das mit dem Gar-Nicht-Erst-Angewöhnen mal vorerst zurück.

Ich lege mal meine Programmierroutine dar, dann versteht ihr vllt. meinen Standpunkt.
Gewöhnlich benutze ich Kate als Codeeditor, weil er einen Vi-Mode besitzt, und daher sehr komfortabel zum Schreiben ist. Um den Buildvorgang zu starten drücke ich Shift+F9, das schubst dann "make clean && make build" an, denn natürlich habe ich für jedes Projekt eine Makefile, die den Vorgang automatisiert, d.h. alle Quelldateien durch den M4-Präprozessor pipet und dann an den Compiler weitergibt, der daraufhin Assemblercode ausspuckt, der dann von AS assembliert und von LD gelinkt wird, natürlich nicht, ohne eine Mapfile zu erstellen. Die Suchpfade werden dabei per -Fu an den Compiler übergeben.

Die Makefile sehe ich daher als genau den richtigen Ort für diese Pfadangaben. Will ich das Projekt mal woanders kompilieren, wo die Dependencies vielleicht woanders liegen, dann muss ich in dem Fall einfach nur die Makefile abwandeln, und nicht etwa in den Quellcode eingreifen :shock: Letzteres erscheint für mich unvorstellbar, schließlich sollte der Quellcode nicht davon abhängen, wo ich mich befinde. Allein schon der Verzeichnis-Trenner würde hier ein unglaubliches Hindernis darstellen.
Delphi-Quellcode:
{$ifdef WINDOWS}
uses unit1 in '...\unit1.pas';
{$elseif}
uses unit1 in '.../unit1.pas';
{$endif}
Wie sähe das denn aus, gleich für die Uses-Klausel schon Betriebssysteme unterscheiden zu müssen?
Der Buildprozess muss sowieso individuell auf die einzelnen Ziele angepasst werden, also kann ich die Unterscheidung lieber dort einbringen. Quellcode und Umgebung sind für mich genauso selbstverständlich zu trennen wie Staat und Kirche. Und Umgebung schließt nicht nur Betriebssystem und Prozessortyp, sondern auch die Verzeichnisstruktur mit ein.

Zitat:

Zitat von jaenicke
Lazarus ist halt eher für kleine Hobby-Projekte ausgelegt wie man an solchen Sachen eindrucksvoll bewiesen bekommt...

Das Problem liegt woanders. Lazarus versucht, Entwicklergruppen mit vollkommen verschiedenen Gewohnheiten zusammenzubringen. Auf der einen Seite RAD-gewohnte Delphianer, die Lazarus entweder über Freiheit, Kosten oder Plattformunabhängigkeit lockt, und auf der anderen Compilerschubser wie mich, die von grundherein hohe Priorität auf Plattformunabhängigkeit legen, und dabei auch bedenken, dass wahrscheinlich noch andere als sie selbst, das Projekt kompilieren wollen, ohne am Quelltext fummeln zu müssen.

Oder in kurz: RADler vs. Fummler. Völlig verschiedene Gewohnheiten, die entsprechend unter einen Hut zu kriegen sind. Hobby vs. Professionell macht hier weniger den Unterschied.

Ich hoffe, ich konnte meinen Standpunkt und meine Gründe verständlich machen ;)
Frohe Ostertage!

jaenicke 8. Apr 2012 23:06

AW: Lazarus Unit einbinden, wie?
 
Es geht dabei ja nur um die uses-Klausel der Projektdatei. In den Units kann man zumindest bei Delphi ohnehin keine Pfade angeben (aus eben den von dir genannten Gründen).

Wenn man absolute Pfade braucht, müsste man das aber in der Tat nach Betriebssystem unterscheiden. In der Regel sind das aber relative Angaben (hoffe ich mal ;-)), so dass man immer den Slash nehmen könnte, der unter Windows wie auch unter unixoiden Betriebssystemen als Pfadtrennzeichen gültig ist.

himitsu 8. Apr 2012 23:14

AW: Lazarus Unit einbinden, wie?
 
Genau, schreib es einfach wie im Linux.
Windows versteht das auch. (das ist nicht so verklemmt, wie Linux und Mac :stupid: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 Uhr.
Seite 1 von 2  1 2      

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