Seite 1 von 1

Mehrere Dateien mit dem Kommandozeilen-Compiler kompilieren

Verfasst: 21.02.2014 15:00
von Andesdaf
Hallo,

ich möchte abhängig vom Tag bestimmte Codes automatisch von PB kompilieren lassen. Dazu
erstelle ich eine Batch-Datei, die dann auf den Kommandozeilen-Compiler zugreifen soll.

Code: Alles auswählen

@rem auto-created batch file
cd "D:\Programme\PureBasic\PureBasic 5.21 (x86)\Compilers\"
pbcompiler "D:\GitHub\...\datei1.pb" /XP
pbcompiler "D:\GitHub\...\datei2.pb" /XP
ich kenn mich damit nicht besonders aus, jedenfalls funktioniert immer nur der erste Aufruf
und bei den folgenden gibt es einen Linker-Fehler, wohl weil immer gleich zurückgekehrt wird.
mit start /wait hab ich auch schon herumprobiert, hat aber nicht geholfen.

Hat jemand einen Lösungsweg parat, wie ich den Compiler sonst dazu bringen kann,
nacheinander mehrere Codes zu kompilieren und auszuführen?

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 15:36
von Bisonte
Bastel dir ein PB Programm, das den Compiler aufruft.
Per RunProgram() kannst du ja die Abarbeitung abwarten bis der erste Aufruf fertig ist, dann den nächsten usw...

Evt. eine Textdatei einlesen wo dann halt drinsteht, was da compiliert werden soll.... dann kann man das ganze variabel halten.

So würde ich das jetzt machen... ;)

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 16:02
von ts-soft
Versuch es mal mit absoluten Pfaden, der Compiler setzt das aktuelle Verzeichnis ja mehrmals neu.
(Nur eine Vermutung)

Code: Alles auswählen

@rem auto-created batch file
SET PBCOMPILER="D:\Programme\PureBasic\PureBasic 5.21 (x86)\Compilers\pbcompiler"
%PBCOMPILER% "D:\GitHub\...\datei1.pb" /XP
%PBCOMPILER% "D:\GitHub\...\datei2.pb" /XP

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 16:07
von Andesdaf
@Bisonte: Das ist mein letzter Stand gewesen. Auch das hat nicht funktioniert.

Ich hatte mehrere Batch-Dateien gespeichert und dann versucht, sie
nacheinander mit RunProgram() und #PB_Program_Wait aufzurufen.
#PB_Program_Wait hatte keinen Effekt, er ist immer gleich zurückgekehrt
und hat die nächste Batch-Datei noch im selben Konsolenfenster angezeigt.

Ich dachte ok, vielleicht liegt's an der Batch-Datei, und hab das ganze mit direktem
Compiler-Aufruf auf Grundlage des Beispiels aus der PB-Hilfe zu RunProgram gemacht:
(hier nicht angepasst)

Code: Alles auswählen

  Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", "/?", "", #PB_Program_Open | #PB_Program_Read)
  Output$ = ""
  If Compiler  
    While ProgramRunning(Compiler)
      If AvailableProgramOutput(Compiler)
        Output$ + ReadProgramString(Compiler) + Chr(13)
      EndIf
    Wend
    Output$ + Chr(13) + Chr(13)
    Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))     
    
    CloseProgram(Compiler)
  EndIf
Resultat: gleiches Ergebnis wie vorher mit den einzelnen Batch-Dateien. Ich hab versucht, auf die
Ausgabe zu verzichten und wieder #PB_Program_Wait eingebaut, hier bekomme ich jetzt jedes Mal
den Fehler, dass iProgram nicht gültig sei. Ohne CloseProgram selber Effekt wie vorher.

Code: Alles auswählen

ForEach llCodes()
    iProgram = RunProgram(#PB_Compiler_Home + "\Compilers\pbcompiler", Chr(34) + llCodes() + Chr(34) + " /XP", "", #PB_Program_Wait)
    If iProgram
      CloseProgram(iProgram)
    Endif
Next
// EDIT: @ts-soft: Ich probiers mal.

// EDIT2: nein, hat nichts gebracht. Ich könnte jetzt zwar hinter jede Batch-Datei ein PAUSE setzen,
dann funktionierts, aber eigentlich möchte ich ja nichts weiter tun müssen.

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 16:40
von ts-soft
Dann nutze das Compilerinterface, so wie im SDK beschrieben, dann bist Du auf der sicheren Seite.
Also Compiler mit Standby starten, Source, Target setzen, Compile mit Flags und dann auf SUCCESS warten.

Hört sich kompliziert und umständlich an, ist aber gar nicht so schwör (schwöre) :wink:

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 17:20
von Andesdaf
ich hab's mal probiert:

Code: Alles auswählen

  iProgram = RunProgram(#PB_Compiler_Home + "\Compilers\pbcompiler", "/STANDBY", "", #PB_Program_Open | #PB_Program_Read)
  If IsProgram(iProgram)
    
    sReturn = ""
    Repeat
      If AvailableProgramOutput(iProgram)
        sReturn = ReadProgramString(iProgram)
        PrintN(sReturn)
      EndIf
    Until sReturn = "READY"
    
    ForEach llCodes()
    
      WriteProgramStringN(iProgram, "SOURCE" + #TAB$ + llCodes())
      WriteProgramStringN(iProgram, "INCLUDEPATH" + #TAB$ + "D:\GitHub\blabla\")
      WriteProgramStringN(iProgram, "TARGET" + #TAB$ + "D:\Dateien\blabla\temp\" + GetFilePart(llCodes()))
      WriteProgramStringN(iProgram, "COMPILE" + #TAB$ + "XPSKIN" + #TAB$ + "PROGRESS")
      
      sReturn = ""
      Repeat
        If AvailableProgramOutput(iProgram)
          sReturn = ReadProgramString(iProgram)
          PrintN(sReturn)
        EndIf
      Until sReturn = "SUCCESS"
    Next
    
  EndIf
ist jetzt nicht lauffähig, aber ich bekomme keine Rückmeldungen, nachdem
ich WriteProgramStringN aufgerufen habe.

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 17:30
von ts-soft
Was ist mit Write? Du schreibst da strings, die bei Deinem Code keiner liest :wink:

PS: Ganz am Ende nicht vergessen CloseProgram()!

Re: Mehrere Dateien mit dem Kommandozeilen-Compiler kompilie

Verfasst: 21.02.2014 17:50
von Andesdaf
na toll, hab ich mich wieder schön zum Obst geschoben :oops:

danke, jetzt läuft's. :allright: