Stoppen Sie das Öffnen der Eingabeaufforderung, wenn Sie eine aus dem haskell-Projekt erstellte exe-Datei ausführen

Nov 30 2020

Ich habe eine kleine Anwendung erstellt, die die Glanzbibliothek für eine GUI verwendet. Wenn Sie "cabal run [cabal file]" eingeben, wird das Projekt erstellt und ausgeführt und fordert nur die GUI auf. Wenn ich stattdessen auf die EXE-Datei klicke, die aus dem Build generiert wurde, wird die GUI geöffnet, aber auch die Eingabeaufforderung. Ich möchte verhindern, dass sich die Eingabeaufforderung öffnet, und nur das Fenster von Gloss öffnen.

Antworten

3 JonPurdy Nov 30 2020 at 20:08

Standardmäßig erstellt GHC unter Windows Konsolenprogramme, die ein Eingabeaufforderungsterminal öffnen, falls noch keines geöffnet ist. Wenn Sie ein Nur-GUI-Programm erstellen möchten, können Sie es -mwindowan den Linker übergeben, indem Sie -optl -mwindowGHC das Flag geben. Wenn Sie Cabal verwenden, fügen Sie dieses Flag dem ghc-optionsFeld in der Zeilengruppe ausführbare Dateien hinzu.

Beachten Sie, dass , wenn Sie diesen Flag verwenden, Ihr Programm jede nicht haben stdin, stdoutoder stderrDatei - Handles, so Aktionen wie putStrLn, printund getLinewird nicht funktionieren, da sie sind gleichwertig hPutStrLn stdout, hPrint stdoutund hGetLine stdin. Wenn Sie protokollieren oder drucken möchten, müssen Sie selbst ein Handle öffnen (z. B. eine Datei, ein Terminal oder einen Socket mit einem anderen Programm, das das andere Ende liest). Funktioniert jedoch Debug.Traceweiterhin, wenn Sie zum Debuggen eine temporäre Ablaufverfolgung benötigen.

Weitere hilfreiche Referenzinformationen finden Sie im GHC-Benutzerhandbuch §16. Ausführen von GHC auf Win32-Systemen .