【问题标题】:VS2017 Cross platform project does not set C++17 as language standardVS2017跨平台项目未将C++17设为语言标准
【发布时间】:2020-10-20 10:02:55
【问题描述】:

我正在使用VS 2017 v.15.9 开发一个跨平台应用程序。目标系统上安装了GCC v 8+,根据文档,它支持C++ 17

但由于某种原因,c++ 语言标准在我的应用程序中坚决停留在C++ 14

我转到项目属性 -> C/C++ -> 语言并将 C++ 语言标准显式设置为C++ 17,它在选择列表中可用,但这并没有改变任何东西。

__cpluscplus 设置为 201406L 在许多标题中,而不是 201703L,我需要打开 C++ 17 的一些可用功能。

据我了解,这个宏是保留的,而且是由编译器设置的?在这种情况下,除了尝试在 VS Project 设置中更改此设置(此设置可用)之外,还需要做什么?

【问题讨论】:

  • 如果您使用CMAKE,您是否尝试过设置标准?比如:set (CMAKE_CXX_STANDARD 17)
  • 除了构建几个简单的开源项目之外,没有使用过CMAKE。不确定在哪里设置它以及结果是否会...syncVS 在另一个系统上?

标签: c++ visual-studio gcc visual-studio-2017 c++17


【解决方案1】:

some reports 已修复此“错误”(未正确设置 __cplusplus 宏的值)。但是,如果您的安装似乎没有修复,那么您可以在编译器的命令行上为每个项目显式设置 /Zc:__cplusplus 选项。

打开项目的“属性”页面(在“解决方案资源管理器”中右键单击项目)并导航到“C/C++”->“命令行”并在“附加选项”编辑框中添加该开关,如下图:

(此屏幕截图实际上来自 VS-2019,但 IIRC,UI 与 VS-2017 非常相似。)

【讨论】:

  • 看截图,应该是普通项目吧?我将它用于跨平台项目,所以左侧树上没有那么多菜单,例如Precompiled HeadersOutput FilesBrowse info 等,但无论如何,我确实放了@987654329 @ in Command Line -> Additional Options 如图所示,但这并没有解决任何问题。我得到一个新的编译错误,说no such file or directory as /Zc:__cplusplus
  • @user1173240 那么,您的项目实际上是使用 MSVC 编译器进行构建,还是使用 GCC?如果是后者,那么我想您将需要等效的 GCC 命令行选项 - 可能类似于 -std:c++17?
  • GCC 编译器。我会尝试另一个。
  • -std:c++17 引发编译器错误。 VS 建议-std=c++17。我试过了,它编译了,但没有用。 __cplusplus 宏仍然表示 c++ 14。顺便说一句,-std=c++17 与我在Project properties -> c / c++ ->Language settingsC++ language standard 选项中启用的选项相同。似乎不起作用。
  • @user1173240 也许您需要 VS 选项,但使用 GCC 样式的语法:-Zc:__cplusplus-Zc=__cplusplus
猜你喜欢
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多