2017-01-11 8 views
0

У меня .mqh исходный файл кода с синтаксической ошибки, например, созданный с помощью следующей команды:Компилятор выдает ошибки под Wine, но не на Windows,

echo some_error > fail.mqh 

Теперь я использую MetaEditor компилятор проверьте синтаксис, и моя цель - напечатать ошибки до стандартного вывода (CON), вместо того, чтобы записывать их в файл (/log:file.log). См .: Compiling.

следующий синтаксис штрафа на 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 (ЦМД), то у меня нет никакого вывода:

> metaeditor.exe /s /log:CON /compile:fail.mqh 

То же самое для CON:/con:, а также. Также на PowerShell.

Хотя CON работает для echo, например .: echo test > CON.

Я мог предположить, что это может быть ошибкой компилятора, но тогда он отлично работает под Wine. Почему это работает только под Wine?

Есть ли другой способ вывода ошибок на экран терминала в Windows вместо файла журнала?


Примечание: Вы можете install compiler from the site или загрузить бинарный файл (32bit или 64bit), чтобы проверить выше.


Разъяснение: Мой главный блокатор для использования двух отдельных команд (компилировать и распечатать журнал ошибок после этого), что CI test может потерпеть неудачу, прежде чем ошибки будут напечатаны, что делает тесты бесполезны, и это история для другого вопроса , Поэтому моя цель - проверить синтаксис и распечатать ошибки за один раз.

+0

Я бы опустил аргумент '/ log: CON' и, в конце концов, добавил перенаправление вывода ошибки' 2> & 1 ' – LotPings

+0

Однако по умолчанию компилятор ничего не выводит на вывод, если не указан параметр '/ log', поэтому он записывает результат компиляции в файл по умолчанию. – kenorb

+0

Похоже, что metaeditor ведет себя/взаимодействует по-разному в этих средах. Как насчет try '/ log: con:' – LotPings

ответ

0

Согласно службе поддержки, приложение Metaeditor не имеет консоли, поэтому оно не может выводить журналы на экран. Так кажется wine обрабатывает специальное устройство CON по-разному. Я сообщил об этом в службу поддержки , и он по-прежнему открыт, поэтому в будущем они могут реализовать консольную поддержку.

В настоящее время единственным обходным решением является использование команды type для вывода файла журнала на консоль после компиляции файлов (или эмулировать его под wine). Даже если компилятор может отобразить его на консоли, он не будет работать должным образом с CI (с точки зрения обработки кодов ошибок), потому что логика обратного выхода metaeditor.exe полностью разрушена, так как она возвращает количество успешно скомпилированных файлов кода ошибки (например, если вы скомпилируете 20 файлов, вы получите код ошибки 20!)!Таким образом, полагаясь на обратный выход metaeditor.exe, это ошибка, и команда MQL в любом случае не планирует ее исправлять, так как они говорят, что так оно и должно работать по их мнению.

Смежные вопросы