如何使用 Visual Studio 2017 Linux 支持编译和构建 C++17 代码?

Posted

技术标签:

【中文标题】如何使用 Visual Studio 2017 Linux 支持编译和构建 C++17 代码?【英文标题】:How to compile and build C++17 code with Visual studio 2017 Linux support? 【发布时间】:2018-02-08 06:28:41 【问题描述】:

请有人解释如何使用 -std=c++1z 或 -std=c++ 编译和构建 C++ Blink Project(VS2017 15.5.5 中的 Linux/Raspberry PI 项目)代码17 (g++),我已经安装了 raspberry 3 模型 B 和最新的 raspbian 操作系统,我成功连接并构建了我的代码并使用 C++11/C++14 标准(默认配置)运行,

但我想用我的代码实现 C++17 功能,例如 std::variants/optional 等等。

我认为当前使用 VS2017 设置的 gcc 环境不支持 std::c++17,我将这些参数添加为项目 C/C++ -> 命令行参数,但所需的标头和编译器支持不存在。

如何使用支持最新标准 (std=c++latest) 的外部 GCC/G++ 编译器的 VS2017 Crossplatform(Linux) 构建系统将我的 C++17 标准代码编译并构建到 raspbian/Raspberry Pi 系统中?

谢谢。

【问题讨论】:

如果您收到错误消息,显示它们总是有用的。完整、完整且未经修改。 我想知道how to configure this project in order to enable C++17 standard features 【参考方案1】:

Raspbian 附带的 GCC 版本已过时,不完全支持 C++17。您需要安装更新版本的编译器。

网上有很多关于如何做到这一点的指南。以This one 为例。

【讨论】:

我在raspbian上安装了最新的gcc,是否应该在windows上安装gcc并与VS项目集成? @BuddhikaChaturanga 我不知道。 VS 是否也需要在 Windows 本地安装 GCC? 不,他们提供了 gcc,我认为它不支持 C++17,现在我正在尝试使用最新的 gcc 编译器进行构建,我对如何使用 VS 项目进行配置感到有点苦恼。 @BuddhikaChaturanga 如果 VS 允许您在远程(Pi)上配置编译器的路径,然后将其指向 /usr/local 中的 g++ 二进制文件。基本上,您需要找到可以配置 VS 将在 Pi 上使用的确切编译器可执行文件的位置。另外,在编译器的命令行选项中手动指定“-std=c++17”。 @NikosC。我已经在 raspbian 端安装了 gcc7.20,问题是如何将这些路径包含到 VS 端,目前 VS 使用安装在 Windows 端的 gcc/g++ 路径(与当前 VS2017 一起安装)。【参考方案2】:

如果您在C/C++ : Language 属性页面(第二个屏幕截图)中将C++ Language Standard 设置为Default,并在C/C++ : Command Line 页面底部添加 -std=c++17Additional Options, VCLinux 会将您的选项添加到它发送到 Linux 远程的命令行中,而不是添加它自己的另一个 -std= 选项。 我已经在 Debian 9 (Stretch) 上对 GCC 6.3.0 进行了尝试,我相信这也是当前的 Raspbian 版本。 GCC 6.3 仅部分支持 C++17,它报告__cplusplus201500,没有它__cplusplus 是 201402(这是 C++14,GCC 6.3 中的默认值)。所以命令行选项正在被执行。

2 月 9 日 我从您的 cmets 中得知,您现在可以在 Linux 遥控器上编译和构建 C++17 代码。

IntelliSense 在 Windows 主机上运行并依赖于 Windows 编译器。由于这个原因,它不会识别g++ 扩展。在撰写本文时,C++17 还不能作为 VCLinux 的一个选项,因此 C++17 的新语言特性未被识别。大概会在某个时候添加支持。如果您只对新的运行时库功能感兴趣,那么您可以尝试将 GCC 标头引入 Windows 主机;这个话题在这方面可能会有所帮助Linux header file not recognized in Visual Studio 2017 Linux Project。

【讨论】:

请参考这些链接: 我在 raspbian 上安装了 gcc-7.2.0 版本,然后将其设置为默认 gcc 并将 VS2017 编译器命令行切换到 -std=c++1z 或 -std=c++17 ,问题 VS2017 intellisense仅适用于 std::17 关键字,但 VS2017 linux 构建系统设法在 raspbian 上使用远程 g++-7.2.0 编译代码,我也可以使用 gdb 服务器(远程调试)在 VS2017 上附加运行进程。请参考这些链接:solarianprogrammer.com/2017/12/08/… & askubuntu.com/questions/26498/choose-gcc-and-g-version 为了获得 inellisense 支持 c++17,我尝试使用 WinSCP 工具将 gcc-7.2.0 include 与本地(Win)目录同步,并将其作为 VC++ 包含在 VS2017 中,但它不是t 成功。:( WinSCP -> winscp.net/eng/download.php

以上是关于如何使用 Visual Studio 2017 Linux 支持编译和构建 C++17 代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建

visual studio2017社区版如何空格操作?

解决Visual Studio 2017隐藏“高级保存选项”命令

如何在 Visual Studio 2017 中使用 Qt 库?

visual studio 2017 如何下载和安装

Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015