ich bau mir gerade mit Lazarus ein kleines Buildprogramm, das mein eigentliches Programm erzeugt und noch andere Kleinigkeiten rund um das bauen abhandelt. Einen eigenen Buildserver (Jenkins und co) lohnt sich dafür nicht. Das ganze aktuell noch unter Windows, später soll das ganze dann unter Linux laufen.
Ich habe mir aus Lazarus die entsprechende Parameterliste gezogen und kann damit das Projekt aus einer Konsole mit fpc auch erzeugen.
Das ganze habe ich dann in ein kleines Programm gepackt:
Code: Alles auswählen
process := TProcess.Create(nil);
process.executable := fpc.Text; // c:\Lazarus\fpc\...\fpc.exe
process.CurrentDirectory := edtSourceDir.Text; //Verzeichnis mit der Projektdatei
process.Parameters.text := mmFpcParams.Text; //Parameter aus Lazarus
process.options := process.Options + [poWaitOnExit, poUsePipes];
process.Active := true;
if Assigned(process.Output) then
mmOutput.Lines.LoadFromStream(process.Output);
process.Free;
wenn ich das Kommando in der Konsole laufen lasse, dann ist das in 3-5 Sekunden durch mit dem Bauen. Wenn ich das über den Code anstoße, dann kann ich das, 2. 3 opder auch 10 Minuten laufen lassen, nix passiert. Breche ich dann ab, dann kommt unter Output max. das Einlesen der fpc.cfg - aber auch nicht ganz..
Unter Process.StdErr kommt nichts zurück.
Mir fehlt gerade die Idee, warum das so in die Binsen geht. Oder macht es mehr Sinn hier auf Plattformspezifische Befehle zurück zu greifen, weil das Ziel wird sein, dass das Programm zukünftig unter linux laufen soll...