Überprüfen Sie, ob eine C ++ 11-Funktion im Compiler mit CMAKE aktiviert ist

8

Ich entwickle ein Projekt mit CMake. Mein Code enthält constexpr -Methoden, die in Visual Studio 2015, aber nicht in Visual Studio 2013 zulässig sind.

Wie kann ich CMakeLists.txt einchecken, wenn das Feature vom angegebenen Compiler unterstützt wird? Ich habe in der CMake-Dokumentation CMAKE_CXX_KNOWN_FEATURES gesehen, aber ich habe nicht verstanden, wie ich sie verwenden soll es.

    
Jepessen 19.12.2016, 10:14
quelle

1 Antwort

7

Sie können target_compile_features verwenden, um C ++ 11 (/ 14/17) zu benötigen. Eigenschaft:

%Vor%

Mit feature1 ist ein Feature, das in CMAKE_CXX_KNOWN_FEATURES aufgeführt ist. Wenn Sie beispielsweise constexpr in Ihrer öffentlichen API verwenden möchten, können Sie Folgendes verwenden:

%Vor%

Sie sollten sich auch das Modul WriteCompilerDetectionHeader ansehen, mit dem Features erkannt werden können als Optionen und bietet eine Rückwärtskompatibilitätsimplementierung für einige Funktionen, wenn der Compiler sie nicht unterstützt:

%Vor%

Hier wird eine Datei foo_compiler_detection.h generiert mit FOO_COMPILER_CXX_CONSTEXPR definiert, wenn das Schlüsselwort constexpr verfügbar ist:

%Vor%

Außerdem wird FOO_CONSTEXPR definiert und auf constexpr erweitert, wenn das Feature für den aktuellen Compiler existiert. Es wird sonst leer sein.

FOO_NULLPTR wird definiert und wird auf nullptr erweitert, wenn das Feature für den aktuellen Compiler existiert. Es wird andernfalls auf eine Kompatibilitätsimplementierung erweitert (z. B. NULL ).

%Vor%

Siehe CMake-Dokumentation .

    
wasthishelpful 19.12.2016, 10:57
quelle

Tags und Links