编译器在Wine下输出错误,但不在Windows上输出

时间:2017-01-11 00:37:02

标签: windows powershell command-line compilation mql

我的.mqh源代码文件存在语法错误,例如由以下命令创建:

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(cmd)上运行相同的命令时,我没有输出:

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

同样适用于CON: / con:。同样在 PowerShell

虽然CON适用于echo,例如:echo test > CON

我可以假设它可能是编译器的一个错误,但它在Wine下工作正常。为什么这只能在Wine下工作?

是否有另一种方法可以将错误输出到Windows上的终端屏幕,而不是日志文件?

注意:您可以install compiler from the site或下载二进制文件(32bit64bit)进行上述测试。

澄清:我使用两个单独命令(在此之后编译并打印错误日志)的主要阻止因素是CI test在打印错误之前可能会失败,这使得测试无用而且它是一个故事另一个问题。所以我的目标是检查语法并一次打印错误。

1 个答案:

答案 0 :(得分:0)

根据支持团队的说法,Metaeditor应用程序没有控制台,因此无法将日志输出到屏幕。因此,似乎wine以不同方式处理特殊CON设备。我已将此问题报告给服务台并且它仍处于打开状态,因此他们可能会在将来实施控制台支持。

目前唯一的解决方法是在编译文件后使用type命令将输出日志文件输出到控制台(或在wine下模拟它)。即使编译器可以将其显示到控制台,它也无法正常使用CI(在处理错误代码方面),因为metaeditor.exe的返回退出逻辑完全被破坏,因为它返回成功编译文件的数量而不是错误代码(例如,如果你编译20个文件,你会得到20个错误代码?!)!因此,依赖于metaeditor.exe的退货退出是一个错误,MQL团队无论如何都不打算修复它,因为他们说这是他们认为应该如何工作的。

相关问题