У меня странная проблема с запуском cl.exe, что поставило меня в тупик. В большом решении VS2008, состоящем из проектов C / C ++, у меня есть один проект, который выполняет несколько сценариев, чтобы выполнить дополнительную обработку. Проект состоит из события перед сборкой, которое вызывает скрипт 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
для получения вывода препроцессора на стандартный вывод.
Эта точная командная строка работает должным образом при запуске из командной строки VS2008. Сборка проекта также работает на моем компьютере с Windows XP. Однако в моем новом окне Windows 7 при сборке проекта out.txt заканчивается пустым. Я также должен добавить, что на некоторых компьютерах Windows 7 моего коллеги он работает нормально, а на некоторых - нет.
Очевидно, что происходит какая-то разница в конфигурации, но я не знаю, что это может быть. Мы проверили соответствующие версии VS2008 SP1 и ActiveState Perl. Я пробовал множество обходных путей в скрипте perl - используя system()
вместо обратных кавычек, используя cl.exe /P
для вывода в файл, а затем перемещая файл (файл пуст), отключая переменную окружения VS_UNICODE_OUTPUT
(без эффекта ). Ничто не изменило поведение - выходные данные генерируются, когда командная строка запускается вручную, но не когда она запускается внутри события предварительной сборки для этого проекта.
Любые идеи о том, какие проблемы конфигурации могут быть причиной этого? У меня практически нет возможностей для продолжения.