这篇文章是由安德鲁·帕多、马克·莱文和伊亚帕·穆鲁甘迪写的。
感谢您的反馈!我们根据您的反馈对布局做了一些更改。
更新 2016年12月8日查找VC++安装位置: 一些人已经问到如何在开发人员的机器上找到VisualC++的实例。已经没有注册了 您可以查询的键。 如果你能发射 在VS命令提示符下,您会发现%%VCInstallDir%%环境变量指向 安装到VC++的根目录。如果您需要查询 这个 以编程方式安装,您需要 查询COM以查找visualstudio和VC++的实例。希思·斯图尔特写了一篇 关于这个话题的博文很棒 用多种语言编写的示例代码。
你会看到很多 Visual Studio 2017中C++开发人员的改进 一旦你加载你的第一个项目。但产品的一些变化并不那么明显。一个特别的问题可能会让您感到惊讶:我们已经将MSVC编译器工具集放在磁盘上的位置。
为什么我们要移动编译器工具集
VS 2015中磁盘上编译器工具的布局反映了多年前做出的决策。当我们在2002年发布visualstudio.NET时,我们发布的编译器只针对x86体系结构。x64和安腾体系结构直到最近才在visualstudio.NET开始开发时宣布。编译器在磁盘上的布局反映了这样一个世界:x86是您唯一需要的编译器。
当我们引入对安腾和x64体系结构的支持时,我们在有意义的地方添加了编译器:在 bin
目录。我们已经有了x86的编译器 bin
目录,所以我们添加了子目录 x86_ia64
和 x86_amd64
适用于运行在x86和目标64位平台以及 amd64
在x64上运行的编译器的目录。
不幸的是,事情并没有就此结束。我们为ARM添加了编译器。我们还添加了交叉目标编译器,它们托管在x64上,目标是x86和ARM。最终我们得到了一个毫无意义的目录树。每当开发人员想要编写与我们的编译器相关的自动化程序时,他们就必须在脚本中为x86托管和目标编译器编写特殊情况。此外,这种布局限制了我们做有趣事情的能力,例如在一台构建机器上并排安装两个版本的编译器或两个不同的编译器。
编译器工具集在VS 2017中移动到了哪里
首先,让我们讨论编译器工具集的主要部分。它们反映在顶级目录中,例如。, %ProgramFiles(x86)%Microsoft Visual Studio2017EnterpriseVC
. (注意这个目录, %VCINSTALLDIR%
,从其VS 2015位置更改为 %ProgramFiles(x86)%Microsoft Visual Studio 14VC
.)
- 工具: 这些工具是您传统上认为的MSVC编译器工具集。这包括旧bin、crt、include和lib目录以及放置在其中的二进制文件。这些二进制文件包括C.exe和Link .exe以及用于VisualC++运行时的头文件和链接库。
- 再贴现: 可再发行目录包含可由最终开发人员使用构建的应用程序重新发行的文件。CRT可再发行程序以及其他运行时(如 安培 和 OpenMP接口 .
- 辅助设备: 辅助目录包含的工具和脚本不是编译过程的一部分,但是需要它们来帮助各种编译场景。这些文件包括 CppCoreCheckers公司 或者 单元测试库 以及
vcvars*.bat
用于配置开发人员环境的脚本。
请注意,Preview5中的编译器工具集布局只是一个预览。我们最终可能会改变布局,甚至改变顶层 %VCINSTALLDIR%
目录取决于内部和外部开发人员的反馈和要求。
工具目录
让我们仔细看看Tools目录–该目录包含编译器工具集。与VS 2015不同,微软Visual C++编译器位于一个名为 MSVC
. 如果您安装了“ClangwithMicrosoftCodeGen”选项,您将在旁边看到一个目录 MSVC
打电话 ClangC2
包含Clang/C2二进制文件的。
MSVC目录中有一个子目录,其编译器版本号为。对于VS 2017 RC,版本号为14.10.24629。在该目录中是 %VCINSTALLDIR%
VS 2015目录: bin
, crt
, include
,和 lib
.
到目前为止,我们遇到了两个很大的不同。首先是 MSVC
目录意味着VisualC++工具可以坐在另一个工具集上,在这种情况下, ClangC2
. 其次,这些工具在 MSVC
目录意味着我们可以在同一个构建机器上安装多个VisualC++编译器版本。现在,没有简单的方法来安装多个版本。但是我们已经设计了目录结构,以便将来能够在Visual C++工具的版本之间轻松切换。
主机和目标
我们发现,更大的变化时,看看内部的 14.10.24629in
目录。而在VS2015中,x86工具集是“标准”工具集,我们的目录名如下 amd64_arm
代表AMD64-ARM交叉目标编译器,在VS 2017中,这些已被拆分为带标签的目录 HostXXX
还有一个子目录叫做 x86
或 x64
. 这里有什么区别?
让我们停下来定义几个术语。”“主机”是指编译器工具集运行的平台“目标”是指编译器构建应用程序以在其上运行的平台。在VS 2015世界, amd64_arm
包括托管在x64上的编译器和目标ARM。在VS2017中,它更加结构化:所有x64托管的编译器都位于一个名为 HostX64
. 在那个目录里我们找到了 x86
, x64
,表示目标体系结构。
这个 bin
目录是唯一具有一组 HostXXX
目录。这是因为可执行文件需要在主机上运行。这个 include
只包含源文件的目录既不特定于主机也不特定于目标。这个 lib
目录仅特定于目标体系结构。同样地,在 Auxiliary
目录特定于目标体系结构,而不是主机。
新布局的好处
我们希望您能看到刷新磁盘上的编译器工具集布局有很多好处。随着VisualC++的发展,包括Android和iOS目标的更多场景,我们需要包括更多的编译器工具集。当我们更频繁地发布工具时,我们增加了开发者可能希望并排安装多个版本的VisualC++编译器工具的机会。这个新的布局是灵活和可扩展的,应该(希望如此!)为我们服务多年。
与VS 2015一样,Windows SDK也不安装在VisualC++二进制文件、标头和LIBs旁边。它们安装在 Program Files(x86)
目录。Visual C++ SDKS(如 DIA软件开发包 )将继续与VC++工具集一起安装。
新布局的缺点
即使改变是好的,它仍然是改变。我们知道,很多人的脚本将打破这种布局的变化。我们决定在VS2017中这样做,因为我们还必须更改顶级目录以适应新安装程序的限制。但任何变化都可能是突破性的变化。
请,请,请检查您使用的脚本,并确保您可以迁移它们以使用新的布局。 我们想知道你有没有遇到什么问题。我们想知道你的代码的迁移经历有多艰难。请在这篇博文上留言或直接发邮件给我们的团队 visualcpp@microsoft.com .
查找默认MSVC工具
最后一个注意事项:很多构建系统需要找到VisualC++工具的默认版本。安装Visual Studio时,它会创建一个文件, %VCINSTALLDIR%AuxiliaryBuildMicrosoft.VCToolsVersion.default.txt
,它包含在典型的Preview 5安装中与VS一起安装的默认工具集的版本字符串, %VCINSTALLDIR%
会指向 %Program Files(x86)%Microsoft Visual StudioVisual Studio 15.0Common7IDEVisualCpp
.
您可以在命令脚本中使用一个额外的行和变量来解析此文件:
@rem set BINDIR=get directory for x86-hosted, x86-targeting binariesset /P VCTOOLS_VERSION=<"%VCINSTALLDIR%AuxiliaryBuildMicrosoft.VCToolsVersion.default.txt"set BINDIR=%VCINSTALLDIR%ToolsMSVC\%VCTOOLS_VERSION%inHostX86x86
反馈
您将看到编译器工具集的新布局带来的许多好处,但我们知道,许多人将不得不修改可能多年没有看过的脚本。我们正在努力使这一经验简单和顺利的每个人,所以请联系我们与您的经验的细节。如果您对此设计的任何部分有任何反馈,请在下面的评论中或通过邮件告知我们 visualcpp@microsoft.com . 谢谢您!
已知问题
更新10/10/2016:结果发现工具->Visual Studio命令提示符找不到 vcvars32.bat
当它启动时。此问题已在下一版本中修复。在此期间,请从Windows shell启动开发人员命令提示符,例如从“开始”按钮或将其固定到任务栏。