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.
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:
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:
Hier wird eine Datei foo_compiler_detection.h
generiert mit FOO_COMPILER_CXX_CONSTEXPR
definiert, wenn das Schlüsselwort constexpr
verfügbar ist:
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
).
Siehe CMake-Dokumentation .