Оболочка cl.exe в Visual Studio 2008 - PullRequest
0 голосов
/ 09 сентября 2011

Я создал оболочку в C ++ для cl.exe (компилятор Visual Studio). Для этого я изменил переменную среды PATH, чтобы Visual Studio сначала нашла мой cl.exe. В моем cl.exe я затем создаю процесс, который запускает реальный cl.exe с параметрами, которые получил мой cl.exe.

Цель этого - отфильтровать выходные данные от реального cl.exe, чтобы удалить предупреждения, с которыми мы ничего не можем сделать. Мы хотим включить «Обнаружение 64-битных вероятностных проблем», потому что это здорово, но выдает предупреждение.

Внимание:

cl: Предупреждение командной строки D9035: опция 'Wp64' устарела и будет удалена в следующем выпуске

Я искал несколько дней, как удалить это конкретное предупреждение, это , а не предупреждение, которое можно отключить с помощью кода или параметров, таких как обычные предупреждения.

Проблема : Visual Studios запускает мой 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, чтобы избавиться от этого предупреждения?

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Я понял это.

Эта переменная окружения из видеостудий каким-то образом используется для подачи сигнала к реальному cl.exe для отправки его результатов в визуальные студии.

VS_UNICODE_OUTPUT = 4209

Очистка этого позволяет моему приложению снова обрабатывать вывод.

Спасибо за вашу помощь ...!

0 голосов
/ 11 сентября 2011

Похоже, вы перенаправляете "реальное" cl.exe stdout, но не stderrstderr именно там, где можно ожидать появления предупреждений компилятора.

...