【发布时间】:2010-01-07 19:47:34
【问题描述】:
我在运行 cl.exe 时遇到了一个奇怪的问题,这让我很困惑。在一个由 C/C++ 项目组成的大型 VS2008 解决方案中,我有一个项目运行一些脚本来做一些额外的处理。该项目包含一个预构建事件,该事件调用一个 Perl 脚本(ActiveState Perl 在机器上)。然后,此 Perl 脚本使用 /E 调用 cl.exe 以生成重定向到文件的预处理输出。 Perl 中的代码如下所示:
my $foo = `"\path\to\cl.exe" @args.rsp >out.txt 2>err.txt`;
args.rsp 是一个纯文本文件,其中包含一堆用于 cl.exe 的命令行参数,包括 /E 以在 stdout 上获取预处理器输出。
当从 VS2008 命令提示符运行时,这个确切的命令行按预期工作。在我的 Windows XP 机器上构建项目也可以正常工作。但是,在我的新 Windows 7 机器上,当我构建项目时,out.txt 最终是空白的。我还应该在我同事的一些 Windows 7 机器上添加它,它可以正常工作,而在其他一些机器上则不行。
显然存在某种配置差异,但我不知道它可能是什么。我们检查了 VS2008 SP1 和 ActiveState Perl 的匹配版本。我在 perl 脚本中尝试了无数解决方法 - 使用 system() 而不是反引号,使用 cl.exe /P 输出到文件然后移动文件(文件为空白),取消设置 VS_UNICODE_OUTPUT 环境变量(无效)。没有改变行为 - 手动运行命令行时会生成输出,但在此项目的预构建事件中运行时不会生成输出。
关于可能导致这种情况的配置问题有什么想法吗?我几乎没有追求的途径。
【问题讨论】:
-
我看到您解决了问题,但我很惊讶,因为您似乎在路径中缺少双反斜杠 - 或者这只是一个 SO 格式化伪影?
-
我有一个类似的问题。在我的情况下,Perl 脚本在 powershell 中运行良好,但作为构建事件,它不会输出相同的文本。它“似乎”正在工作,但输出不同(马车控制和其他问题表明奇怪的环境差异),我担心我可能会遇到问题。整个问题/答案令人深思。
标签: visual-studio visual-studio-2008 io-redirection cl.exe bootcamp