我在运行 cl.exe 时遇到了一个奇怪的问题,这让我很困惑。在一个由 C/C++ 项目组成的大型 VS2008 解决方案中,我有一个项目运行一些脚本来做一些额外的处理。该项目包含一个预构建事件,该事件调用一个 Perl 脚本(ActiveState Perl 在机器上)。这个 Perl 脚本然后调用 cl.exe/E
以生成重定向到文件的预处理输出。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
环境变量(无效)。没有任何改变行为 - 手动运行命令行时会生成输出,但在此项目的预构建事件中运行时不会生成输出。
关于什么样的配置问题可能导致这种情况的任何想法?我几乎没有追求的途径。