Ich habe vor Kurzem begonnen mich in die Programmiersprache FreePascal einzuarbeiten und versuche derzeit beim Durcharbeiten eines Tutorials rund um OOP in ObjectPascal ( http://delphi.about.com/od/course/a/oop_intro.htm" onclick="window.open(this.href);return false; ) ein paar Werkzeuge kennen zu lernen. Ich habe, neben FPC selbst und Lazarus natürlich, MSEIDE/MSEGUI, FPGUI und eben FPMake ins Auge gefasst, Letzteres bereitet mir aber einige Probleme. Die Idee an sich finde ich absolut super, aber ich verstehe leider nicht einmal die Grundlagen und bin verzweifelt auf der Suche nach Dokumentation.
Auf http://wiki.freepascal.org/FPMake" onclick="window.open(this.href);return false; habe ich ein paar Beispiele gefunden, aber die sind leider nicht erklärt, nicht einmal kommentiert. Auch die Quelldatei fpmkunit.pp aus den FPC-Quellen ist absolut unkommentiert. Dabei wäre es dort vielleicht möglich die Funktionsweise herauszulesen (ist es in FreePascal üblich, dass so viele Klassen in einer Unit stecken?), wenn ich zumindest wissen würde, wie das System grundlegend funktioniert.
So weit ich es bisher herauslesen konnte, sind die grundlegenden Elemente TTarget/TTargets, TPackage/TPackages und TDependency/TDependencies. TTarget ist wohl das bekannte System, in dem die einzelnen Ziele (Libs, Executables) beschrieben werden, Package wird dann vermutlich benutzt, um mehrere Ziele in einem Paket zu packen, zusammen mit Metainformationen, wie beispielsweise in Linux Systemen üblich und hat daher auch ein Feld TTargets und ein Feld TDependencies. Wie diese Klassen benutzt werden und wie sie sich verhalten ist für mich jedoch ein absolutes Rätsel.
Ich versuche es mal anhand des "einfachen" Beispiels (Kommentare von mir hinzugefügt):
Code: Alles auswählen
program fpmake;
uses fpmkunit;
Var
P: TPackage;
T: TTarget; // TPackage enthält doch bereits TTargets, wieso brauchen wir hier ein zusätzliches?
begin
With Installer do
begin
P := AddPackage('my-nice-program'); // Ich füge "Installer" ein Package hinzu und referenziere es mit "P".
P.OSes := [win32,openbsd,netbsd,freebsd,darwin,linux]; // Die zugelassenen Zielsysteme vermutlich.
T := P.Targets.AddUnit('myunit'); // Hier wird wohl das erste Target für "P" festgelegt. Es ist eine Unit. Warum hat dies ein Rückgabewert?
T.ResourceStrings := True; // Diese Zeile sagt mir überhaupt nichts.
{ Ein zweites Ziel, diesmal wieder eine Unit obwohl es "myprogram" heißt?
"T" wird überschrieben, ohne dass es vorher verwendet wurde? }
T := P.Targets.AddUnit('myprogram');
{ "T" ist von "myunit" abhängig. Sollte das nicht, da es im gleichen Package liegt, ohnehin verfügbar sein?
Oder gilt die Abhängigkeit für die Zeit des Build-Vorgangs? Natürlich bleibt die Frage, wieso ein
zusätzliches Target definiert sein muss }
T.Dependencies.Add('myunit');
Run;
end;
end.
Grüße,
Korkenkrone