Eine der Herausforderungen bei der Softwareentwicklung besteht darin, die Kompatibilität mit verschiedenen Compilerversionen und deren Funktionssätzen sicherzustellen. Insbesondere die Feststellung, ob ein Compiler C 11 unterstützt, kann für Projekte, die auf neuere Sprachfunktionen basieren, von entscheidender Bedeutung sein.
CMake bietet eine praktische Möglichkeit, dieses Problem anzugehen. Mit CMake Version 3.1.0 und höher bietet es die Variable CMAKE_CXX_COMPILE_FEATURES, die die vom aktiven Compiler unterstützten C-Funktionen auflistet.
Anstatt sich in der Praxis direkt auf diese Variable zu verlassen, verwendet CMake Bietet strukturiertere Mechanismen zum Spezifizieren von C-Sprachstandards und -funktionen.
Explizite Angabe des C-Standards
Eine Option besteht darin, CXX_STANDARD und CXX_STANDARD_REQUIRED Eigenschaften für Ihr CMake-Ziel. Dadurch wird explizit der gewünschte C-Standard angegeben und ob er obligatorisch ist (wenn der Compiler ihn nicht unterstützt, schlägt der Build fehl).
Zum Beispiel:<code class="cmake">add_executable(prog main.cc) set_property(TARGET prog PROPERTY CXX_STANDARD 11) set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)</code>
Erforderlich angeben C-Funktionen
Alternativ können Sie den Befehltarget_compile_features verwenden, um die von Ihrem Ziel verwendeten C-Funktionen anzugeben. CMake leitet dann aus diesen Funktionen den entsprechenden C-Standard ab.
Die globale EigenschaftCMAKE_CXX_KNOWN_FEATURES listet die verfügbaren C-Funktionen zur Berücksichtigung auf.
Zum Beispiel:<code class="cmake">add_executable(foobar main.cc) set(needed_features cxx_strong_enums cxx_constexpr cxx_auto_type) target_compile_features(foobar PRIVATE ${needed_features})</code>
Überprüfung auf unterstützte Funktionen
So überprüfen Sie die unterstützten C-Funktionen Ihres Compilers:<code class="cmake">cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) project(foobar CXX) message("Your C++ compiler supports these C++ features:") foreach(feature in ${CMAKE_CXX_COMPILE_FEATURES}) message(feature) endforeach()</code>
Das obige ist der detaillierte Inhalt vonWie kann ich CMake verwenden, um C 11-Unterstützung in Compilern zu erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!