如何在 Visual Studio 中启用 C++17 编译?
Posted
技术标签:
【中文标题】如何在 Visual Studio 中启用 C++17 编译?【英文标题】:How to enable C++17 compiling in Visual Studio? 【发布时间】:2017-05-09 14:26:06 【问题描述】:我想使用 C++17 功能。
如何在 Microsoft Visual Studio 中将编译从 C++14 切换到 C++17?
或者它在 VS 的发布版本中不可用?
【问题讨论】:
C++17 有哪些特性?哪个版本的 Visual Studio?如果您问的是 C++17,为什么要标记您的问题c++11
和 c++14
?
c++17 不可用,我认为对 C++ 特定版本感兴趣的人更知道如何切换它。例如,我希望 std::vector.emplace_back() 返回对新创建元素的引用。我知道 +1 行,我得到了那个参考,但无论如何我想知道我的问题的答案。 VS 社区 2015(14.0.25431.01 更新 3)
你应该在这里查看:blogs.msdn.microsoft.com/visualstudio
你不能在 VS 中启用特定的语言方言,你会得到他们实现的任何东西。如果您使用的是 VS21015,那么您可能会对 C++17 中的标准库功能有很好的运气,但在语言功能方面则不然。
@preat MSVC 2017 有一个“最新”设置,但尚未发布。
【参考方案1】:
现在有一个下拉菜单(至少从 VS 2017.3.5 开始),您可以在其中专门选择 C++17。可用选项是(在项目 > 属性 > C/C++ > 语言 > C++ 语言标准下)
ISO C++14 标准。 msvc 命令行选项:/std:c++14
ISO C++17 标准。 msvc 命令行选项:/std:c++17
Visual Studio 2021:
ISO C++20 标准。 msvc 命令行选项:/std:c++20
任何 Visual Studio:
最新的草案标准。 msvc 命令行选项:/std:c++latest
【讨论】:
语法-std:c++14
、-std:c++17
和-std:c++latest
也有效,例如当您更喜欢手动输入编译器选项时(使用 VS2017 测试)。
答案是否还不清楚,或者您是指-
而不是我列出的/std:
开关?
我看到来自gcc
或clang
的好处。然后-
的侵入性较小(但是语法仍然略有不同(:
而不是=
)。
@AndreiKrasutski。目前还没有 ISO C++20,但在 /std:c++latest 中有一些支持。 C++20 标准预计在明年推出。我在答案中的评论中进行了编辑。
如果在 Visual Studio 2017 > 项目属性 > C / C++ > 语言 > C++ 标准下拉菜单中未选择任何内容,则使用什么 C++ 标准?我在下拉列表中有 14、17 和最新的,但没有选择,那么在这种情况下如何找到项目中使用的 c++ 标准?【参考方案2】:
MSBuild(Visual Studio 项目/解决方案*.vcproj/*.sln):
添加到项目设置中的附加选项:/std:c++latest
以启用最新功能 - 目前为 VS2017 的 C++17、VS2015 Update 3。
https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/
/permissive-
将禁用非标准 C++ 扩展,并在 VS2017 中启用标准一致性。
https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/
编辑(2018 年 10 月):此处记录了最新的 VS2017 功能:
https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version
VS2017 现在支持:/std:[c++14|c++17|c++latest]
。这些标志可以通过项目的属性页设置:
在 Visual Studio 开发中设置此编译器选项 环境
打开项目的“属性页”对话框。有关详细信息,请参阅工作 与项目属性。 选择配置属性,C/C++, 语言。 在 C++ 语言标准中,选择要使用的语言标准 从下拉控件中支持,然后选择 OK 或 Apply 保存 您的更改。
CMake:
Visual Studio 2017 (15.7+) 支持 CMake 项目。 CMake 使得以各种方式启用现代 C++ 功能成为可能。最基本的选项是通过在 CMakeLists.txt 中设置 a target's property 来启用现代 C++ 标准:
add_library ($PROJECT_NAME)
set_property (TARGET $PROJECT_NAME
PROPERTY
# Enable C++17 standard compliance
CXX_STANDARD 17
)
在接口库的情况下:
add_library ($PROJECT_NAME INTERFACE)
target_compile_features ($PROJECT_NAME
INTERFACE
# Enable C++17 standard compliance
cxx_std_17
)
【讨论】:
我在 VS2017 中做了下拉菜单,但编译器仍然继续应用 C++98 标准,这到底是什么【参考方案3】:Visual Studio 2015 Update 3 不支持您正在寻找的 C++17 功能(emplace_back()
返回参考)。
Support For C++11/14/17 Features (Modern C++)
C++11/14/17 Features In VS 2015 RTM
VS 2015 Update 2’s STL is C++17-so-far Feature Complete
Visual Studio 2015 Update 3
STL Fixes In VS 2015 Update 3
【讨论】:
【参考方案4】:如果将现有的 Visual Studio 2015 解决方案引入 Visual Studio 2017 并且您想使用 c++17 本地编译器构建它,您应该首先将解决方案/项目重新定位到 v141 ,然后下拉菜单将如上所述出现(配置属性-> C/C++ -> 语言 -> 语言标准)
【讨论】:
【参考方案5】:Visual Studio 2019 版:
下拉菜单移至:
右键单击项目(不是解决方案) 属性(或 Alt + Enter) 从左侧菜单中选择配置属性 常规 中间有一个名为“C++ 语言标准”的选项 旁边是下拉菜单 您可以在此处选择默认、ISO C++ 14、17 或最新版【讨论】:
记得对“所有配置”和“所有平台”执行此操作。那是一个花了 2 小时弄清楚为什么它仍然不起作用的人!不过谢谢你的回答。【参考方案6】:VS Code 2020 版
在tasks.json
文件中,(在您使用g++-9
构建和调试之后)
添加 -std=c++2a
用于 2020 功能(c++1z
用于 2017 功能)。
添加-fconcepts
使用concept
关键字
"args": [
"-std=c++2a",
"-fconcepts",
"-g",
"$file",
"-o",
"$fileDirname/$fileBasenameNoExtension"
],
现在编译,您可以使用 2020 年的功能。
【讨论】:
没有 Visual Studios 2020,这是针对 V.S.代码 但问题不是问“仅适用于”VS Studio。如果您重新阅读该问题,请在行尾“它在 VS 的发行版本中不可用?”。问题是灵活的,不需要严格。 这个问题不是那么灵活,如果是,就需要关闭。会不够专注。 VS Code 不是 Visual Studio 的不同版本。一个是集成开发环境,一个是编辑器。一个提取您编写的代码,另一个嵌入到它正在处理的项目的文件系统中。一个是微软资助的,一个是微软开发的。一个可以移植到 Linux,一个不能。一个配置,对另一个不起作用。不妨回答一下如何在记事本中编译C++17。 我了解您希望我删除答案。不幸的是,我不会像你那样解释它。在您发表评论之前,我投了赞成票,我相信我的回答会引导用户。 SO中的答案中有大量缺失的部分。也许你也应该检查它们。同时,我的回答可能会为用户提供解决方案。以上是关于如何在 Visual Studio 中启用 C++17 编译?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2015 隔离外壳中启用PrivateGalleries
如何在 Visual Studio 2017 中启用 WiX 项目
如何在 Visual Studio 2017 中启用 TFS 跟踪
如何在 Visual Studio 中启用 NuGet 包还原?