2017-07-29 3 views
1

Beim Erstellen eines neuen CLion-Projekts und Auswählen des C++ 17-Sprachenstandards wird der C++ 17-Code nicht kompiliert. Die anfängliche CMakeLists.txt Datei ist wie folgt:Kompilieren von C++ 17 mit CLion, CMake und dem VS2017-Compiler

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

die C++ 17-Code zu kompilieren hatte ich die folgende Zeile in die CMakeLists.txt Datei hinzuzufügen:

add_compile_options(/std:c++latest) 

Ist das der richtiger Weg (und/oder nur Weg?), um diese Kompilieroption in CMAKE/CLion hinzuzufügen?

Der verwendete C++ - Compiler ist die Datei vs2017 cl.exe mit nmake.exe auf einer Windows 10-Workstation mit CLion 2017.2.

+0

Visual Studio nicht unterstützt C++ 17 in der Praxis zum Zeitpunkt dieses Schreibens. Siehe auch [Unterstützung für C++ 11/14/17 Features (Modern C++)] (https://msdn.microsoft.com/en-us/library/hh567368.aspx) auf MSDN. Sie unterstützen auch nicht wirklich C++ 11 oder C++ 14. Wir haben einige Änderungen vorgenommen, die auf der Support-Matrix basieren, die auf MSDN angekündigt wurde, und die Fehlerberichte und Absturzberichte kamen herein. All die Probleme, die Microsofts Werbe-Mist verursachte, machten mich krank. – jww

+1

Mögliches Duplikat von [So aktivieren Sie/std: C++ 17 in VS2017 mit CMake] (https://stackoverflow.com/questions/44960715/how-to-enable-stdc17-in-vs2017-with-cmake) – Florian

Antwort

1

Die CMAKE_CXX_STANDARD Variable wird verwendet, um die CXX_STANDARD Eigenschaft zu initialisieren.

Vom Grundstück Dokumentation:

Für Compiler, die keine Ahnung von einem Standard-Niveau haben, wie MSVC, hat dies keine Auswirkung.

für Visual Studio 2017 mit Klar CMake, dem kanonischen Weg für C++ 17 (der Standard ist C++ 14):

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

Danke; das funktioniert, vorausgesetzt, ich lege die Anweisung nach der Anweisung 'add_executable (optional2 $ {SOURCE_FILES})' ab. – sethmc

+0

@SethCurry das wird erwartet. Das Ziel 'optional2' existiert nicht, bis der Aufruf von' add_executable' es erzeugt –