我用 C++ 为
cl.exe
(Visual Studio 编译器)创建了一个包装器。为此,我更改了 PATH
环境变量,以便 Visual Studio 首先找到我的 cl.exe
。然后,在我的 cl.exe
中,我创建一个进程,使用我的 cl.exe
获得的参数运行真正的 cl.exe
。
这样做的目的是过滤真实的输出
cl.exe
以删除我们无能为力的警告。我们希望打开“检测 64 位概率问题”,因为它很棒,但它会发出警告。
警告:
cl:命令行警告 D9035:选项“Wp64”已被弃用,并将在未来版本中删除
我已经搜索了几天关于如何删除此特定警告的信息,它不是您可以使用代码或普通警告等选项关闭的警告。
问题:Visual Studio 运行我的
cl.exe
,然后我的 cl.exe
运行真正的 cl.exe
,但从那时起我的 cl.exe
不再接收输出。我已经通过让它调用真实的 cl.exe
以外的东西来测试这一点,并且我的 cl.exe
可以完全控制输出...
任一
cl.exe
文件的任何输出都会显示在 Visual Studio 的输出框中,但我的 cl.exe
不再接收真实 cl.exe
的任何输出...
我正在使用管道来处理我的
cl.exe
中的输出,它可以与真实的 cl.exe
以外的任何东西一起使用。
为什么我的
cl.exe
不管理输出? Visual Studio 会忘记我的 cl.exe
并以某种方式将其自身附加到真实的吗?
此外,除了为
cl.exe
创建包装器来消除此警告之外,还有其他解决方案吗?
我已经弄清楚了。
来自 Visual Studios 的这个环境变量以某种方式用于向真正的 cl.exe 发出信号,将其输出发送到 Visual Studios。
VS_UNICODE_OUTPUT=4209
清除此选项允许我的应用程序再次处理输出。
感谢您的帮助...!
看起来您正在重定向“真实”
cl.exe
stdout
,但不是stderr
。 stderr
正是人们期望编译器警告出现的地方。