أحد التحديات في تطوير البرمجيات هو ضمان التوافق مع إصدارات المترجم المختلفة ومجموعات الميزات الخاصة بها. على وجه الخصوص، تحديد ما إذا كان المترجم يدعم C 11 يمكن أن يكون أمرًا بالغ الأهمية للمشاريع التي تعتمد على ميزات اللغة الأحدث.
يوفر CMake طريقة مناسبة لمعالجة هذه المشكلة. مع الإصدار 3.1.0 والإصدارات الأحدث من CMake، فإنه يقدم المتغير 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 لتحديد ميزات C المستخدمة بواسطة هدفك. سيستنتج 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})
التحقق من الميزات المدعومة
للتحقق من ميزات C المدعومة للمترجم الخاص بك: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()
تمنحك هذه الأساليب المرونة والتحكم في معيار لغة C والميزات المستخدمة في مشاريع CMake الخاصة بك. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3