Компилятор выводит ошибки под Wine, а не под Windows
У меня есть .mqh
файл исходного кода с синтаксической ошибкой, например, созданный следующей командой:
echo some_error > fail.mqh
Теперь я использую компилятор Metaeditor для проверки синтаксиса, и моей целью является вывод ошибок на стандартный вывод (CON
) вместо записи их в файл (/log:file.log
). Смотрите: Компиляция.
Следующий синтаксис прекрасно работает в Linux/macOS следующим образом (также в wine cmd.exe
):
$ wine metaeditor.exe /s /log:CON /compile:fail.mqh
??fail.mqh : information: Checking 'fail.mqh'
fail.mqh(1,1) : error 116: 'some_error' - declaration without type
fail.mqh(1,1) : error 161: 'some_error' - unexpected end of program
: information: Result 2 error(s), 0 warning(s)
Обратите внимание, что /log
параметр обязателен, иначе компилятор ничего не печатает по умолчанию. Так что если /log
указывается, то по умолчанию он записывает результат компиляции в файл. А я пользуюсь спец CON
устройство для отображения ошибок.
Проблема в том, что когда я запускаю ту же команду в Windows (cmd), то у меня нет вывода:
> metaeditor.exe /s /log:CON /compile:fail.mqh
То же самое для CON:
/ con:
также. Также на PowerShell.
Хотя CON
работает на echo
Например: echo test > CON
,
Я мог предположить, что это может быть ошибкой компилятора, но тогда он прекрасно работает под Wine. Почему это работает только под Wine?
Есть ли другой способ вывода ошибок на экран терминала в Windows вместо файла журнала?
Примечание. Вы можете установить компилятор с сайта или загрузить двоичный файл ( 32-разрядный или 64-разрядный) для проверки выше.
Пояснение: Мой основной блокировщик для использования двух отдельных команд (после этого компилируйте и распечатывайте журнал ошибок) состоит в том, что тест CI может завершиться неудачей до того, как будут напечатаны ошибки, что делает тесты бесполезными, и это история для другого вопроса. Поэтому моя цель - проверить синтаксис и распечатать ошибки за один раз.
1 ответ
По словам службы поддержки, приложение Metaeditor не имеет консоли, поэтому оно не может выводить журналы на экран. Ну, это похоже wine
ручки специальные CON
Устройство по-разному. Я сообщил об этой проблеме в службу поддержки, и она все еще открыта, поэтому они могут реализовать поддержку консоли в будущем.
В настоящее время единственным обходным решением является использование type
команда для вывода файла журнала на консоль после компиляции файлов (или эмулировать его в wine
). Даже если компилятор может отобразить его на консоли, он также не будет работать должным образом с CI (с точки зрения обработки кодов ошибок), поскольку логика возврата завершается metaeditor.exe
полностью сломан, так как возвращает код успешно скомпилированных файлов вместо кода ошибки (например, если вы скомпилируете 20 файлов, вы получите 20 кодов ошибки?!)! Поэтому полагаясь на возврат выхода metaeditor.exe
Это ошибка, и команда MQL все равно не собирается ее исправлять, поскольку, по их мнению, именно так и должно работать.