Не запускать командную строку при запуске exe-файла, созданного из проекта haskell

Nov 30 2020

Я создал небольшое приложение, которое использует библиотеку глянца для графического интерфейса. При вводе «cabal run [cabal file]» проект создается и запускается, и запрашивает только графический интерфейс. Когда я вместо этого щелкаю файл .exe, созданный при сборке, открывается графический интерфейс, но также и командная строка. Я хочу, чтобы командная строка не открывалась и открывалось только окно из глянца.

Ответы

3 JonPurdy Nov 30 2020 at 20:08

По умолчанию в Windows GHC создает консольные программы, которые открывают терминал командной строки, если он еще не открыт. Если вы хотите создать программу только с графическим интерфейсом, вы можете передать -mwindowее компоновщику, указав -optl -mwindowфлаг GHC. Если вы используете Cabal, вы должны добавить этот флаг в ghc-optionsполе исполняемого раздела.

Учтите , что если вы используете этот флаг, ваша программа не будет иметь какую - либо stdin, stdoutили stderrфайл ручки, так действиям нравятся putStrLn, printи getLineне будет работать, так как они эквивалентны hPutStrLn stdout, hPrint stdoutи hGetLine stdin. Если вы хотите вести журнал или распечатывать, вам нужно самостоятельно открыть дескриптор (например, файл, терминал или сокет с другой программой, читающей другой конец); однако Debug.Traceон все равно будет работать, если вам потребуется временная трассировка для отладки.

Вы можете найти более полезную справочную информацию в Руководстве пользователя GHC §16. Запуск GHC в системах Win32 .