"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية اكتشاف دعم مترجم C++ 11 في CMake؟

كيفية اكتشاف دعم مترجم C++ 11 في CMake؟

تم النشر بتاريخ 2024-11-06
تصفح:229

How to Detect C  11 Compiler Support in CMake?

اكتشاف دعم المترجم C 11 في CMake

نظرة عامة

في هذا الدليل، نستكشف طرقًا للكشف تلقائيًا عما إذا كان المترجم يدعم C 11 في الداخل CMake، يوفر تحليلاً شاملاً لكل من إصدارات CMake الأحدث والسابقة.

CMake 3.1.0 والإصدارات الأحدث

قدم الإصدار 3.1.0 من CMake ميزة قوية: الكشف عن ميزات C التي يدعمها مترجم. يتم تحقيق ذلك من خلال الأمر cmake_minimum_required:

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)

من خلال تحديد الحد الأدنى لإصدار CMake، يمكنك الوصول إلى المتغير CMAKE_CXX_COMPILE_FEATURES، الذي يسرد كافة الميزات المدعومة ميزات ج. يمكّنك هذا من تحديد معيار C لاستخدامه في مشروعك.

تحديد معيار C بشكل صريح

يتيح لك CMake تعيين معيار C بشكل صريح لهدف باستخدام الخاصيتين CXX_STANDARD وCXX_STANDARD_REQUIRED. على سبيل المثال:

set_property(TARGET prog PROPERTY CXX_STANDARD 11)
set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)

يضمن هذا استدعاء المترجم باستخدام العلامات الصحيحة، مثل -std=c 11.

تحديد ميزات C المطلوبة

وبدلاً من ذلك، يمكنك تحديد ميزات C المطلوبة باستخدام الأمر target_compile_features. من هذه القائمة، يمكن لـ CMake استنتاج معيار C المناسب.

target_compile_features(foobar PRIVATE cxx_strong_enums cxx_constexpr cxx_auto_type)

احصل على قائمة ميزات C المدعومة باستخدام CMAKE_CXX_KNOWN_FEATURES.

الاستنتاج

يوفر CMake طرقًا متعددة لاكتشاف دعم مترجم C 11 وتحديد معيار C. تتيح هذه المرونة تكوينات مخصصة لمشروع C، مما يضمن التوافق والتجميع السلس.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3