Wie bekomme ich CMake entweder std = c ++ 14 / c ++ 1y oder c ++ 17 / c ++ 1z basierend auf der GCC-Version?
GCC 4.x nicht akzeptiert --std=c++14
switch für C++14 - code-es dauert --std=c++1y
statt. Spätere Versionen nehmen --std=c++1z
aber (wahrscheinlich) nicht --std=c++17
die noch nicht eingestellt wurde (und Schreibe diese in 2016). Vielleicht gibt es ähnliche Probleme mit C++11.
Tut CMake einige Anlage (vielleicht als Modul) übergeben Sie die richtige Option laut der GCC-version?
InformationsquelleAutor der Frage einpoklum | 2017-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen, wenn für Sie eine bestimmte C++ - version, ist der empfohlene Weg, dies zu tun mit CMake 3.1 und höher, ist die Verwendung der
CXX_STANDARD
CXX_STANDARD_REQUIRED
undCXX_EXTENSIONS
target-Eigenschaften oder Variablen-äquivalente angeben, Ziel-Vorgaben. Ausführliche Informationen finden Sie hieraber die kurze version geht so etwas wie dieses:CMake sollte, dann wählen Sie die entsprechende compiler-flag für den gewünschten C++ - standard basiert auf dem, was der compiler unterstützt, oder Fehler aus, wenn es unterstützt nicht den geforderten standard.
Es sollte auch darauf hingewiesen werden, dass CMake kann ein upgrade der Ziel verwendet werden, später eine Sprache standard als die, die angegeben ist durch seine
CXX_STANDARD
target-Eigenschaft. Die Verwendung von kompilieren feature Anforderungen (wie erwähnt in @FlorianWolters Antwort) erhöhen kann, die Sprache, die standard-Anforderung. In der Tat, CMake wird Holen immer die stärkere Sprache Voraussetzung angegeben wird entweder durch dieCXX_STANDARD
target-Eigenschaft oder der compile-Funktion, die Anforderungen auf das Ziel. Beachten Sie auch, dass die CMake-Dokumentation von 3.10.1 nicht genau den WegCXX_EXTENSIONS
interagiert mit compile-Funktionen, wieCXX_EXTENSIONS
ist nur wirksam, wennCXX_STANDARD
ist auch angegeben für die meisten gängigen Compiler (da Sie angegeben werden, zusammen mit einem compiler flag).InformationsquelleAutor der Antwort Craig Scott
Moderne CMake code sollte die
target_compile_features
Befehl zur Anforderung eines speziellen C++ - standard. Diese können angegeben werden, die als build-Anforderung nur (PRIVATE
), die Nutzung Anforderung nur (INTERFACE
) oder der Bau und die Nutzung Anforderung (PUBLIC
).Beispiel:
Finden Sie im Abschnitt Erfordern Normen in der offiziellen CMake-Dokumentation für cmake kompilieren-featuresum mehr zu erfahren.
InformationsquelleAutor der Antwort Florian Wolters
Überprüfen Sie, ob der compiler unterstützt die Fahnen? Vielleicht so etwas wie
InformationsquelleAutor der Antwort Some programmer dude