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.
Den C-Standard explizit angeben
Eine Option besteht darin, den CXX_STANDARD und CXX_STANDARD_REQUIRED-Eigenschaften für Ihr CMake-Ziel. Dies gibt explizit den gewünschten C-Standard an und ob er obligatorisch ist (wenn der Compiler ihn nicht unterstützt, schlägt der Build fehl).
Zum Beispiel:
add_executable(prog main.cc)
set_property(TARGET prog PROPERTY CXX_STANDARD 11)
set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)
Angeben erforderlicher C-Funktionen
Alternativ können Sie den Befehl target_compile_features verwenden, um die verwendeten C-Funktionen anzugeben durch Ihr Ziel. CMake leitet dann aus diesen Features den entsprechenden C-Standard ab.
Die globale Eigenschaft CMAKE_CXX_KNOWN_FEATURES listet die verfügbaren C-Features zur Berücksichtigung auf.
Zum Beispiel:
add_executable(foobar main.cc)
set(needed_features
cxx_strong_enums
cxx_constexpr
cxx_auto_type)
target_compile_features(foobar PRIVATE ${needed_features})
Auf unterstützte Funktionen prüfen
So überprüfen Sie die unterstützten C-Funktionen Ihres Compilers:
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()
Diese Methoden geben Ihnen Flexibilität und Kontrolle über den C-Sprachstandard und die in Ihren CMake-Projekten verwendeten Funktionen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3