Компилятор выводит ошибки под 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 все равно не собирается ее исправлять, поскольку, по их мнению, именно так и должно работать.

Другие вопросы по тегам