使用MinGW和Cygwin在Visual C ++中 以及打开文件夹

[原文发表地址] Using MinGW and Cygwin with Visual C++ and Open Folder [原文发表时间] 2017/07/19

使用Visual Studio 15.3预览版4构建跨平台C和C ++代码比以往任何时候都更加简单。最新的预览改进了对替代编译器的支持,并构建了MinGW和Cygwin等环境MinGW(Windows的Minimalist GNU)。如果您不熟悉它,它是GCC系列中旨在Windows上本机运行的编译器。 如果您有兴趣快速了解这项新功能,请查看我们最新的9频道GoingNative剧集

然而,大多数MinGW安装不仅仅包括一个编译器。 MinGW的大多数发行版都包含了许多其他工具,可用于熟悉的GNU工具集在Windows上构建和组装软件。 MinGW构建环境通常包含一个完整的POSIX开发环境,可用于使用POSIX构建工具和POSIX软件开发本地Windows软件,该软件可在仿真层的帮助下运行在Windows上。

下载预览并尝试最新的C ++功能。 您还需要确保除了Desktop C ++之外,还要安装用于C ++工作负载的Linux Tools以使用这些新功能。 您可以在Microsoft文档网站上了解有关打开文件夹的更多信息。 我们期待您的反馈。

为什么是MinGW

这里有您希望在Windows使用MinGW的三个原因。 第一个是简单的编译器兼容性。 我们都喜欢MSVC,但现实是,一些代码库是从根本上设计的,期望它们将与GCC一起构建。 对于许多跨平台项目尤其如此。 移植这些代码库以支持MSVC可能代价昂贵,当您想要起动并且运行您的代码。 使用MinGW,您可以在几分钟启动并运行而不是几天。

然而,使用MinGW源代码兼容性相比于GCC更为引人注目。 MinGW环境不仅仅是编译器,而是包括整个POSIX构建环境。 这些开发环境允许跨平台项目在Windows上构建,而对其构建逻辑的修改很少。 需要Make或AutoTools,它已经安装 - 如果您使用像MSYS2这样的每个工具环境,你可能需要的只是一个单独的软件包管理命令。

最后,一些MinGW发行版(如MSYS2)允许您在Windows上构建本机POSIX软件,而无需将代码移植到Win32中。 这是通过允许本机POSIX工具在Windows上运行的仿真层来实现的。 同样的层是让您最喜爱的POSIX构建工具在MinGW环境中运行。

在Windows上安装MinGW

一旦安装最新的Visual Studio Preview后MinGW的入门就很简单。 首先,您需要确保在安装Visual Studio时选择C ++工作负载。 接下来,您将需要下载MinGW。 实际上有很多方法来安装MinGW。 如果你特别富有开拓精神,你可以从源代码构建它,但安装任何流行的二进制下载包要容易得多。 更受欢迎的发行版之一是MSYS2入门指南)。 标准MSYS2安装安装三个构建环境:POSIX构建环境以本地定位32位和64位Windows,以及用于构建面向Windows的POSIX软件的仿真层。如果您有一个特定的项目,您正在使用,还需要检查他们是否有任何项目特定的说明如何安装

如果您有一个特定的项目,您正在使用,还需要检查他们是否有任何项目特定的说明如何安装

MinGW。 一些项目甚至包括自己定制的MinGW分布。

 

使用Visual Studio的MinGW

已经有可能使用基于GCC的编译器与Visual Studio项目一段时间了,但是在Windows上使用MinGW构建的许多跨平台项目并没有被组织到Solution和Visual C ++项目文件中。 为实际项目创建这些资产可能是耗时的。 为了简化跨平台项目到Visual Studio,我们现在支持直接打开文件夹,在最新的预览中,使用替代编译器和构建MinGW等环境比以前更容易。

使用“打开文件夹”,您可以使用完整的解决方案和C ++项目文件提供的完全相同的保真度,以完整的智能感知,构建和调试编辑代码。 然而,您只需编写少量的JSON,而不是创作数百行XML。 更好的是,您只需要为所需功能编写JSON。 例如,如果您只想在IDE中编辑代码并遵守所有其他命令行,则只需编写几行JSON即可启用智能感应。

精确的智能感知编辑

要在使用“打开文件夹”时充分利用智能感知功能,您将需要创建一个CppProperties.json文件。 您可以通过从主菜单中选择“Project-> Edit Settings-> CppProperties.json ...”来创建此文件。

 

该文件将自动填充四种配置:x86和x64体系结构的“调试”和“释放”。 如果您不需要所有这些配置,您可以删除它们以减少杂乱。 接下来,您将需要配置几个选项来获得与MinGW构建一致的智能感应。

在每个配置中,您可能会注意到一个“intelliSenseMode”键。 对于MinGW和其他基于GCC的编译器,您应该根据您的架构将其设置为“windows-clang-x86”或“windows-clang-x64”。

接下来,您将需要添加项目的包含路径。 配置特定的包含路径可以添加到每个配置下的“includePath”数组。 您也可以在这里添加项目范围的包含路径,但是将它们添加到“INCLUDE”环境变量中可能更容易,通过将“环境”块添加到配置文件作为“配置”对等体:

"environments": [

{

"MINGW_PREFIX": "C:/msys64/mingw64",

"MINGW_CHOST ": "x86_64-w64-mingw32",

"MINGW_PACKAGE_PREFIX": "mingw-w64-x86_64",

"MSYSTEM": "MINGW64",

"MSYSTEM_CARCH": "x64_64",

"MSYSTEM_PREFIX": "${env.MINGW_PREFIX}",

"SHELL": "${env.MINGW_PREFIX}/../usr/bin/bash",

"TEMP": "${env.MINGW_PREFIX}/../tmp",

"TMP": "${env.TEMP}",

"PATH": "${env.MINGW_PREFIX}/bin;${env.MINGW_PREFIX}/../usr/local/bin;${env.MINGW_PREFIX}/../usr/bin;${env.PATH}",

"INCLUDE": "project/lib/include;${env.MINGW_PREFIX}/mingw/include"

}

],

注意:MINGW PREFIX应该指向您的MinGW安装,如果您使用默认设置安装MSYS2,该目录将为“C:/ msys64 / mingw64”。

大多数基于GCC的编译器,包括MinGW,都会自动包含某些系统头目录。 对于完整的智能感应,您需要将它们添加到包含路径列表。 您可以通过运行以下方式获取这些标准包含的列表:

echo | gcc -Wp,-v -x c++ - -fsyntax-only

MinGW构建

一旦设置了智能感知(使用“MINGW_PREFIX”及其相关环境变量定义并添加到“PATH”),使用MinGW构建就非常简单。 首先,您将需要创建一个构建任务。 右键单击您的构建脚本(或任何其他要与任务关联的文件),然后选择“配置任务”:

 

如果您还没有创建一个存根,这将创建一个“tasks.vs.json”文件。 由于MinGW及其工具已经在PATH中,如在CppProperties.json中配置的,您可以像这样配置任务:

{

"version": "0.2.1",

"tasks": [

{

"taskName": "build-all",

"appliesTo": "hello.cpp",

"contextType": "build",

"type": "launch",

"command": "${env.comspec}",

"args": [

"g++ -o bin/helloworld.exe -g hello.cpp"

]

}

]

}

这个例子很简单 - 它只构建一个文件 - 但是这可以调用Make或者MinGW支持的任何其他构建工具。 一旦保存此文件后,将有一个“Build” 选项可用对于任何与“appliedTo” 标签匹配的文件。

从上下文菜单中选择“Build”将运行命令并将任何控制台输出流输出到“输出”窗口。

调试MinGW应用程序

一旦你配置项目进行构建后,可以通过选择模板来配置调试。 构建可执行文件后,在文件夹视图中找到它,并从解决方案资源管理器中的可执行文件的上下文菜单中选择“调试和启动设置”:

这将允许您为此可执行文件选择一个调试器模板:

这将在配置调试器的“launch.vs.json”文件中创建一个条目:

{

"version": "0.2.1",

"defaults": {},

"configurations": [

{

"type": "cppdbg",

"name": "helloworld.exe",

"project": "bin\\helloworld.exe",

"cwd": "${workspaceRoot}",

"program": "${debugInfo.target}",

"MIMode": "gdb",

"miDebuggerPath": "${env.MINGW_PREFIX}\\bin\\gdb.exe",

"externalConsole": true

}

]

}

在大多数情况下,只要在“CppProperties.json”文件中定义了“MINGW_PREFIX”,就完全不需要修改它。 现在您可以编辑,构建和调试代码了。 您可以右键单击可执行文件,并在上下文菜单中选择“调试”,或者在调试下拉菜单中选择新添加的启动配置使用F5。 您应该能够使用断点和其他调试功能,如本地的,监视和自动窗口。 如果您无法点击断点,请确保您的构建命令已配置为发出GDB兼容的符号和调试信息。

最后,要完成内部循环,可以在“tasks.vs.json”中为构建任务添加一个“输出”标签。 例如:

"output": "${workspaceRoot}\\bin\\helloworld.exe",

关于Cygwin和GCC系列的其他编译器

虽然我们在这篇文章中专门讨论了MinGW,但值得一提的是,上述内容很少是MinGW所特有的。 这些主题同样适用于其他编译器和构建环境,只要它们可以生成可以使用GDB调试的二进制文件。 通过最少的修改,上述“使用MinGW与Visual Studio”部分中的说明可以与其他环境如Cygwin甚至其他编译器(如Clang)一起工作。 在未来,Open Folder将支持更多种类的编译器和调试器 - 一些开箱即用,有些可能是您的项目特有的额外配置。

发送反馈给我们

要尝试最新最好的C ++功能,并给我们一些早期的反馈意见,请下载并安装最新的Visual Studio 2017 Preview。 和往常一样,我们欢迎您的反馈。 请通过电子邮件在  visualcpp@microsoft.com  ,通过  Twitter@visualc   或Microsoft Visual Cpp的Facebook发送任何意见。

 

如果您遇到Visual Studio 2017的其他问题,请通过报告问题通知我们,该问题在安装程序和IDE本身都可用。 有关建议,请通过UserVoice通知我们。 我们期待您的反馈!