[Erledigt] Unit Output Directory OS übergreifend

Für Fragen von Einsteigern und Programmieranfängern...
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

[Erledigt] Unit Output Directory OS übergreifend

Beitrag von charlytango »

Hi

Um die kompilierten Units aus dem Weg zu schaffen und zu strukturieren hab ich sie mittels "Unit Output Directory" in ein Verzeichnis gepackt.

Als Wert funktioniert für mich

C:\Laz_Lib\<Projektname>\$(TargetCPU)-$(TargetOS)-$(LazVer)

perfekt.
Nun wurde ich mit meinem Datenmodul-Projekt gerügt dass dieser Pfad nur Windows-kompatibel ist und so nicht auf anderen Betriebssystemen funktioniert.
Brauchte ich bisher nicht, aber dem stimme ich schon zu.

Nur habe ich keine allgemeingültige Formulierung gefunden die zb den Pfad ins jeweilige HOME Verzeichnis legt. Oder gibt es noch bessere Varianten? Vielleicht eine Variable die man wie die bereits benutzten einfügen kann? $(HOME) klappt zb nicht ;-)

Sicher weiß jemand von euch mehr -- Bitte um einen kleinen Denkanstoß, denn besonders bei Linux bin ich ziemlich blank.
Zuletzt geändert von charlytango am So 18. Dez 2022, 10:02, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: Unit Output Directory OS übergreifend

Beitrag von af0815 »

Normalerweise ist der Pfad relativ zur Projektdatei zu betrachten. Das "C:\Laz_Lib\"ist das Problem. Gib bei den Pfaden einmal "./$(TargetCPU)-$(TargetOS)-$(LazVer)/NamedesProjekts" ein, damit wird ein Pfad angelegt, dir deinen Spezifikationen entspricht. Man unterscheidet normalerweise nicht in Lazarusversion, ausser du hast einen Grund dafür. Gnerell gibt man in Lazarus nur relative Pfade zum Projekt an. Das geht auch nach oben mit "..". Das ist kein Problem. Auch ob man den Slash oder den Backslash verwendet, ist kein Problem, Lazarus kümmert sich darum.

Bei meinen Projekten, die im GIT liegen ist es egal, auf welchen System die ausgechecked werden. Kompiliert wir überall ohne Änderungen. Auch wo das Projekt ausgechecked wird ist durch die relative Angabe der Pfade komplett egal. Ob das jetzt in Linux oder auch Windows auf einer D: Platte liegt ist dadurch nicht relvant.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Unit Output Directory OS übergreifend

Beitrag von charlytango »

af0815 hat geschrieben:
Sa 17. Dez 2022, 19:15
Gib bei den Pfaden einmal "./$(TargetCPU)-$(TargetOS)-$(LazVer)/NamedesProjekts" ein, damit wird ein Pfad angelegt, dir deinen Spezifikationen entspricht.
Generell gibt man in Lazarus nur relative Pfade zum Projekt an.
Schon klar. Aber dann hab ich immer noch ein Verzeichnis im Applikationsverzeichnis.
Ich wollte die Units schon relativ zum AppDir unterbringen, aber irgendwie weiter weg.
Ist nicht ganz das was ich suche :(

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: Unit Output Directory OS übergreifend

Beitrag von af0815 »

charlytango hat geschrieben:
Sa 17. Dez 2022, 21:49
Ich wollte die Units schon relativ zum AppDir unterbringen, aber irgendwie weiter weg.
Ist nicht ganz das was ich suche :(
dann gehe mit "../../" oder ähnlich im Verzeichnis hoch und dann dorthin wo du willst. Sinnvoll ist es aber nur dann wenn du eine geplante Struktur hast die auf allen Plattformen gleich abgebildet werden kann. Das geht halt nur über relative Pfadangaben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Unit Output Directory OS übergreifend

Beitrag von charlytango »

Danke. Dessen bin ich mir bewusst dass ich mit ../ relativ "hochsteigen" kann.
Und sinnvoll ist das eben nur wie du meintest wenn man die Struktur auf allen Plattformen abbilden kann. Und da ich aber nicht kontrollieren kann in welches Verzeichnis jemand auf einer beliebigen Plattform den Source reinkopiert wäre das eher eine schlechte Option.

Deswegen hab ich halt gehofft, ich hätte irgend eine Variable übersehen die aufs Home-Verzeichnis des angemeldeten Benutzers zeigt, denn das wäre wohl auf allen Plattformen ein sicherer Hafen für so ein Unit-Verzeichnis.

Schade, aber danke für die Mühe

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

Re: Unit Output Directory OS übergreifend

Beitrag von wp_xyz »

Ich habe gerade ausprobiert, dass man das Macro $(HOME) im Unit- und Projekt-Ausgabeverzeichnis verwenden kann.
Dateianhänge
lazlib.png
lazlib.png (7.47 KiB) 761 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: Unit Output Directory OS übergreifend

Beitrag von af0815 »

Wenn mir einer in mein Home Verzeichnis reinpfuscht ist er draussen. Das ist für mich ein ABSOLUTER NO GO.

Die Programmierungen sind mit voller Absicht bei mir strikt getrennt vom Home Verzeichnis und liegen bei Windows sogar auf einer anderen Platte. Unter Linux liegt das eventuell unter /opt/lazdev/bin (oder so ähnlich) was hat eine Komponente oder Programm also in meinem Home verloren ? Ausser für die Einstellungen die laut den Spezifikationen des BS sowieso in eigenen Bereichen zu liegen haben. Vor allen was soll ein Unit Output Directory ausserhalb der Komponente bringen ?! Das erschliesst sich mir einmal nicht. Wenn ich eine Suite an Komponenten habe, dann kann ich ja für die Suite ein gemeinsames Verzeichnis definieren innerhalb der Suite. Das ist aber immer relativ erreichbar. Und wenn ich die Komponente lösche ist es gut und alles gelöscht und nicht irgendwelche Leichen in irgendwelchen Verzeichnissen, bei denen ich nicht gerechnet habe, das es sie gibt.

Da bin ich ein wenig radikal :-) Aber ich hasse Systeme mit querverteilten Schrott, nur weil die Leute nicht verstanden haben, wie das vom System her vorgesehen ist und das jedes BS und auch BS Version seine Eigenheiten hat. Im fpc/Lazarus gibt es genügend Bibliotheken, die einem helfen die richtigen Pfade zu finden und zwar vom BS unabhängig.

Versucht einmal auf 100 Rechnern eine Software als User sauber unter Windows zu installieren, so das diese ohne Hacks wie beschreibbares Programmverzeichnis funktionieren. Wenn ihr sowas mal beruflich machen durfte und euch mit dem Auseinandergesetzt habt, so werdet ihr das verstehen. Nur Test wie man das installiert oder Installer für die Software machen die wenigsten. Reinkopieren in Programmeverzeichnis, Hinweise des BS wegklicken und dann noch schnell die Berechtigungen auf Administrator ändern, damit man das BS aushebelt geht ja eh schnell. Nachdenken warum das so ist auch nicht. Nur mach das in einer Firma mit zentraler Softwareverwaltung und sinnvollen Vorgaben bei der Security.

BTW: Ist nicht persönlich gemeint, sondern Allgemein :shock: :D
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Unit Output Directory OS übergreifend

Beitrag von charlytango »

af0815 hat geschrieben:
So 18. Dez 2022, 08:35
BTW: Ist nicht persönlich gemeint, sondern Allgemein :shock: :D
Auch wenn ich erwiesenermaßen einen schnellen Wolf habe und oft nicht merke dass der schon aus dem Gatter raus ist und am Gegenüber hängt (also zu schnellen und heftigen Reaktionen neige) nehme ich solche Sachen gar nicht persönlich.
Womit ich nie Probleme hatte war Kompetenz, also Menschen die wissen warum sie was tun. Deswegen frage ich ja hier.

Zwangsläufig outet man sich als unwissend oder blamiert sich. Was solls.
Ich habe hier im Forum wesentlich mehr und aus der Praxis gelernt als woanders -- danke dafür an alle die dazu beigetragen haben.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Unit Output Directory OS übergreifend

Beitrag von charlytango »

Nun zurück zum Thema.

Offensichtlich ist es möglich das HOME Verzeichnis als Unit Output zu verwenden (siehe wp_xyz) aber sehr gescheit scheint es nicht zu sein (siehe af0815)

hmm... dann für das Projekt eben ins Programmverzeichnis

THX

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [Erledigt] Unit Output Directory OS übergreifend

Beitrag von fliegermichl »

Standardmäßig gibt Lazarus das ja alles unter ./lib aus. Das erscheint mir durchaus auch sinnvoll da bak/ und lib/ sowieso in jeder .gitignore stehen.
Wozu willst du ein Verzeichnis außerhalb dafür verwenden?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: [Erledigt] Unit Output Directory OS übergreifend

Beitrag von af0815 »

ALs Beispiele kann man sich die Struktur von Lazarus selbst nehmen. Da ist das Projekt tiefer, die Exe's im Hauptpfad und der unit output gesammelt unter unit. Für das Hauptprojekt gesehen. Das ist ein schönes Beispiel (nicht das einzige) wie man ein riesen Projekt strukturieren kann. Man darf nicht vergessen, Es ist nicht die IDE alleine, die dort hineinkompiliert wird, sondern Lazarus beinhaltet viele zusätzliche Teile.

Damit kann ich aber ein reltiv schnellen Clean Prozess von dem grundlegenden System machen, indem ich das units Verzeichnis lösche und so Lazarus zwinge es beim nächsten kompilieren es wieder neu aufzubauen. Hat so seine Vorteile.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: [Erledigt] Unit Output Directory OS übergreifend

Beitrag von wp_xyz »

charlytango hat geschrieben:
Sa 17. Dez 2022, 19:00
[...] Datenmodul-Projekt [...]
Wenn ich mich an den anderen Thread richtig erinnere, versuchst du hier mit Hilfe eines Datenmoduls diverse allgemeine Funktionalitäten zu Beispiel-Datenbanken zur Verfügung zu stellen. Warum machst du daraus nicht ein Package? Packages sind die Antwort von Lazarus auf das Pfad-Chaos bei Delphi... Wenn jemand das verwenden will, muss er das entsprechende Package in die Anforderungen seines Projektes übernehmen, und schon kümmert sich die IDE darum, dass alles gefunden wird. Mache nur ein Laufzeit-Package, dann must du auch nichts installieren. Wenn du auf eine andere IDE umziehst (anderer Rechner, anderes BS, andere Version), dann musst du das Package nur einmal in der IDE öffnen, damit die IDE für die Zukunft davon weiß.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [Erledigt] Unit Output Directory OS übergreifend

Beitrag von charlytango »

wp_xyz hat geschrieben:
So 18. Dez 2022, 11:13
Warum machst du daraus nicht ein Package?
Weil ich bislang von Packages absolut null Ahnung habe :oops:

Als Idee wäre das sicher fein. Ich behalte das mal im Hinterkopf

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [Erledigt] Unit Output Directory OS übergreifend

Beitrag von charlytango »

fliegermichl hat geschrieben:
So 18. Dez 2022, 10:07
Standardmäßig gibt Lazarus das ja alles unter ./lib aus. Das erscheint mir durchaus auch sinnvoll da bak/ und lib/ sowieso in jeder .gitignore stehen.
Wozu willst du ein Verzeichnis außerhalb dafür verwenden?
weil ich mich um GIT rumdrücke wo es geht, ich verwende SVN und vermutlich kann man das auch dort einstellen dass bak/ und lib/ unberücksichtigt bleiben

Die Diskussion darüber zwingt mich gerade das eben neu zu überdenken.
Danke Jungs :roll:

PascalDragon
Beiträge: 829
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: [Erledigt] Unit Output Directory OS übergreifend

Beitrag von PascalDragon »

charlytango hat geschrieben:
So 18. Dez 2022, 11:23
fliegermichl hat geschrieben:
So 18. Dez 2022, 10:07
Standardmäßig gibt Lazarus das ja alles unter ./lib aus. Das erscheint mir durchaus auch sinnvoll da bak/ und lib/ sowieso in jeder .gitignore stehen.
Wozu willst du ein Verzeichnis außerhalb dafür verwenden?
weil ich mich um GIT rumdrücke wo es geht, ich verwende SVN und vermutlich kann man das auch dort einstellen dass bak/ und lib/ unberücksichtigt bleiben
Falls du TortoiseSVN verwendest: Rechtsklick auf das bak/ oder lib/ Verzeichnis und dann im TortoiseSVN Menü auf Add to ignore list. Den recursive Eintrag brauchst du nur nutzen, wenn du das im obersten Level deines Checkout machst.
FPC Compiler Entwickler

Antworten