2017-07-29 140 views
1

当创建新的CLion项目并选择C++ 17语言标准时,C++ 17代码将不会编译。 初始的CMakeLists.txt文件如下:使用CLion,CMake和VS2017编译器编译C++ 17

cmake_minimum_required(VERSION 3.8) 
project(optional2) 
set(CMAKE_CXX_STANDARD 17) 
set(SOURCE_FILES main.cpp) 
add_executable(optional2 ${SOURCE_FILES}) 

要编译的C++ 17代码我不得不以下行添加到的CMakeLists.txt文件:

add_compile_options(/std:c++latest) 

这是该正确的方式(和/或唯一的方法?)在CMAKE/CLion中添加此编译选项?

正在使用的C++编译器是运行CLion 2017.2的Windows 10工作站上的带有nmake.exe的vs2017 cl.exe。

+0

Visual Studio中不支持在实践C++ 17截至撰写本文时为止。另请参阅MSDN上的[Support For C++ 11/14/17 Features(Modern C++)](https://msdn.microsoft.com/en-us/library/hh567368.aspx)。它们并不真的支持C++ 11或C++ 14。我们根据MSDN上宣传的支持矩阵做了一些更改,并且汇报了错误报告和崩溃报告。微软广告废话造成的所有问题都让我不耐烦。 – jww

+1

[如何在VS2017中使用CMake启用/ std:C++ 17](https://stackoverflow.com/questions/44960715/how-to-enable-stdc17-in-vs2017-with-cmake) – Florian

回答

1

CMAKE_CXX_STANDARD变量用于初始化CXX_STANDARD属性。

从属性文件:

对于没有标准水平的概念,编译器,如MSVC, 这没有任何影响。

对于Visual Studio 2017用普通CMake的,用于C++ 17的规范的方法(默认为C++ 14)是:

target_compile_options(optional2 PRIVATE /std:c++latest) 
+1

谢谢;这工作提供了我把'add_executable(optional2 $ {SOURCE_FILES})'语句后的语句。 – sethmc

+0

@SethCurry这是预期的。在'add_executable'调用创建它之前,目标'optional2'不存在 –