2017-07-29 139 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'不存在 –