cl.exe の実行で奇妙な問題が発生し、困惑しています。C/C++ プロジェクトで構成される大規模な VS2008 ソリューションでは、いくつかのスクリプトを実行して追加の処理を行う 1 つのプロジェクトがあります。プロジェクトは、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
環境変数を設定解除します(効果はありません)。動作に変更はありません。コマンド ラインを手動で実行すると出力が生成されますが、このプロジェクトのビルド前イベント内で実行すると生成されません。
これを引き起こしている可能性のある構成上の問題について何か考えはありますか? 私は追求する道がほとんどありません。