【问题标题】:How to make Visual Studio 2012 call the native 64-bit Visual C++ compiler instead of the 32-bit x64 cross-compiler?如何让 Visual Studio 2012 调用原生 64 位 Visual C++ 编译器而不是 32 位 x64 交叉编译器?
【发布时间】:2013-01-07 00:38:39
【问题描述】:

Visual Studio 2012 似乎总是调用位于 %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\x86_amd64 的 32 位版本的 cl.exe)而不是位于 %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\amd64 的 64 位版本。

我尝试在 Microsoft.Cpp.x64.user 属性表的 VC++ 目录 部分中的“可执行目录”列表的开头添加 $(VCInstallDir)bin\amd64,但这根本不起作用——当我重建我得到这个错误:

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 位 C++ 编译器?

【问题讨论】:

  • 这个问题是出于好奇,还是因为我这样做的原因实际上影响了修复 IDE 的过程?
  • 只是单纯的好奇。我想不出任何理由要使用本机 64 位编译器。
  • @JamesKanze:微软这样做是有原因的;)我需要看看它是否可以更快地编译我的一些项目。
  • 64 位模式通常比 32 位慢。您使用 64 位模式是因为您的程序空间不足。如果您的 C++ 源代码由于空间不足而无法使用 32 位编译器进行编译……那是一些相当大的程序。
  • @JamesKanze:你试过编译 Chromium 吗?

标签: c++ visual-c++ visual-studio-2012 visual-c++-2012


【解决方案1】:

这个答案有点晚了,但令人沮丧的是,微软的在线文档中仍然没有直接可用的好资源。事实证明这很容易,即使不是很方便。

在命令提示符下,键入(根据需要更改 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。我总是在第一次设置 MSVC 环境后启动我的 CMake 生成器,所以老实说我不知道​​它是否需要,但你也可以选择这样做(在其他所有事情之前):

> 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"

这是我终于找到答案的original post on MSDN 的链接。

【讨论】:

  • 更新:对于VS2013,环境变量已经改变。现在是:'set PreferredToolArchitecture=x64' 见link
  • 在 VS2013 中还有一种机制可以在 vcxproj 文件中设置更改 -- 参见 stackoverflow.com/a/25626630/188414
【解决方案2】:

我正在将一个旧项目从 Win32 转换为 x64 并遇到了这个问题。
我发现了两种不同的方法来解决这个问题:

方法一:
一世。转到:项目属性 | 一般 | 平台工具集
ii.将值从“Visual Studio 2012 (v110)”更改为“Visual Studio 2012 - Windows XP (v110_xp)

方法 2:
一世。打开配置文件%LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props
ii.在&lt;ExecutablePath&gt; 属性组中,我将$(WindowsSDK_ExecutablePath_x64) 条目替换为$(WindowsSDK_ExecutablePath_x86)

任何这些都正常工作之后。

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 2023-03-06
    • 1970-01-01
    • 2012-03-24
    • 2018-03-22
    • 2011-07-16
    • 2011-10-25
    • 2017-08-03
    相关资源
    最近更新 更多