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

Compiler outputs the errors under Wine, but not on Windows

我有 .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 or download the binary (32bit or 64bit) 进行上面的测试。


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

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

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