軟體開發中的挑戰之一是確保與不同編譯器版本及其功能集的兼容性。特別是,確定編譯器是否支援 C 11 對於依賴較新語言功能的專案至關重要。
CMake 提供了一種解決此問題的便捷方法。在 CMake 版本 3.1.0 及更高版本中,它提供了 CMAKE_CXX_COMPILE_FEATURES 變量,其中列出了活動編譯器支援的 C 功能。
在實踐中,CMake 不是直接依賴此變量,而是提供了用於指定 C 語言標準和功能的更多結構化機制。
明確指定 C 標準
一個選項是設定 CXX_STANDARD 與 CXX_STANDARD_REQUIRED CMake 目標的屬性。這明確指定了所需的 C 標準以及是否是強制的(如果編譯器不支持,建置將失敗)。
例如:
add_executable(prog main.cc)
set_property(TARGET prog PROPERTY CXX_STANDARD 11)
set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)
指定所需的C 功能
或者,您可以使用target_compile_features或者,您可以使用
target_compile_features指令指定使用的。由你的目標。然後,CMake 將從這些功能中推導出適當的 C 標準。
CMAKE_CXX_KNOWN_FEATURES全域屬性列出了可供考慮的可用 C 功能。
add_executable(foobar main.cc)
set(needed_features
cxx_strong_enums
cxx_constexpr
cxx_auto_type)
target_compile_features(foobar PRIVATE ${needed_features})
add_executable(foobar main.cc) 設定(需要的功能 cxx_strong_enums cxx_constexpr cxx_auto_type) target_compile_features(foobar PRIVATE ${needed_features})
檢查支援的功能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()
[&S&m][&m]版本3.1.0 FATAL_ERROR)
項目(foobar CXX)
message(“您的 C 編譯器支援這些 C 功能:”)
foreach(${CMAKE_CXX_COMPILE_FEATURES}中的功能)
訊息(功能)
endforeach()這些方法為您提供了對 CMake 專案中使用的 C 語言標準和功能的靈活性和控制。 免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3