Как заставить Visual Studio 2012 вызывать собственный 64-разрядный компилятор Visual С++ вместо 32-разрядного кросс-компилятора x64?

Visual Studio 2012, по-видимому, всегда вызывает 32-разрядную версию cl.exe, расположенную в %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\x86_amd64) вместо 64-разрядной версии, расположенной в %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\amd64.

Я попытался добавить $(VCInstallDir)bin\amd64 в начало списка "Исполняемые каталоги" в разделе "Каталоги VС++" в таблице свойств Microsoft.Cpp.x64.user, но это не работает вообще - когда я перестраиваю, я получаю эту ошибку:

TRACKER : error TRK0002: Failed to execute command: "
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\CL.exe"
@C:\Users\<my_profile>\AppData\Local\Temp\tmpf3d817cafe064ad28e7dd62b2cb591c3.rsp
". The operation identifier is not valid.

Как я могу заставить Visual Studio 2012 использовать собственный 64-разрядный компилятор С++?

Ответ 1

Этот ответ немного запоздал на вечеринку, но, к сожалению, по-прежнему нет хорошего ресурса, доступного напрямую из онлайн-документации Microsoft. Оказывается, это легко, даже если не совсем удобно.

В командной строке введите (изменив версию VS в соответствии с вашими потребностями):

> set _IsNativeEnvironment=true
> "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" YourProject.sln

Ключ к этому находится в файле

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.targets

где это говорит

<SetEnv Condition="'$(_IsNativeEnvironment)' == 'true'"
        Name ="PATH"
        Value ="$(NativeExecutablePath)"
        Prefix ="false">
  <Output TaskParameter="OutputEnvironmentVariable" PropertyName="Path"/>
</SetEnv>

Мой проект генерируется CMake, поэтому я обычно в командной строке на несколько строк, прежде чем я могу открыть VS в любом случае. Я всегда запускал свои генераторы CMake после первой настройки среды MSVC, поэтому, честно говоря, я не знаю, требуется ли это или нет, но вы также можете сделать это (прежде всего):

> call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64

и/или

> call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\vcvars64.bat"

Вот ссылка на оригинальный пост на MSDN, где я наконец-то нашел ответ.

Ответ 2

Я преобразовал старый проект с Win32 на x64 и столкнулся с этой проблемой.
Я нашел два разных способа обойти это:

Метод 1:
 я. Получено: Свойства проекта | Общие | Платформенный набор инструментов
 II. Измените значение с Visual Studio 2012 (v110) 'на Visual Studio 2012 - Windows XP (v110_xp)'

Мехтод 2:
я. Открыть файл конфигурации %LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props
II. Внутри группы свойств <ExecutablePath> я заменил запись $(WindowsSDK_ExecutablePath_x64) на $(WindowsSDK_ExecutablePath_x86)

После того, как любой из них работал нормально.