सॉफ्टवेयर विकास में चुनौतियों में से एक विभिन्न कंपाइलर संस्करणों और उनके फीचर सेट के साथ संगतता सुनिश्चित करना है। विशेष रूप से, यह निर्धारित करना कि कोई कंपाइलर सी 11 का समर्थन करता है या नहीं, नई भाषा सुविधाओं पर निर्भर परियोजनाओं के लिए महत्वपूर्ण हो सकता है।
सीमेक इस मुद्दे को संबोधित करने का एक सुविधाजनक तरीका प्रदान करता है। सीएमके संस्करण 3.1.0 और बाद के संस्करण के साथ, यह CMAKE_CXX_COMPILE_FEATURES वेरिएबल प्रदान करता है, जो सक्रिय कंपाइलर द्वारा समर्थित सी सुविधाओं को सूचीबद्ध करता है।
व्यवहार में, इस वेरिएबल पर सीधे निर्भर होने के बजाय, सीएमके सी भाषा मानकों और सुविधाओं को निर्दिष्ट करने के लिए अधिक संरचित तंत्र प्रदान करता है।
सी मानक को स्पष्ट रूप से निर्दिष्ट करना
एक विकल्प CXX_STANDARD और आपके सीएमके लक्ष्य के लिए CXX_STANDARD_REQUIRED गुण। यह स्पष्ट रूप से वांछित सी मानक को निर्दिष्ट करता है और क्या यह अनिवार्य है (यदि कंपाइलर इसका समर्थन नहीं करता है, तो निर्माण विफल हो जाएगा)। सीसी) सेट_प्रॉपर्टी(लक्ष्य प्रोग प्रॉपर्टी CXX_STANDARD 11) set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)
आवश्यक 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 कमांड का उपयोग कर सकते हैं आपके लक्ष्य द्वारा. इसके बाद सीएमके इन सुविधाओं से उचित सी मानक तैयार करेगा। ]add_executable(foobar main.cc) सेट(needed_features cxx_strong_enums cxx_constexpr cxx_auto_type) target_compile_features(foobar Private ${needed_features})
समर्थित सुविधाओं की जांच करना
अपने कंपाइलर की समर्थित C सुविधाओं को सत्यापित करने के लिए:
cmake_minimum_required(संस्करण 3.1.0 FATAL_ERROR) प्रोजेक्ट(फूबार CXX) संदेश ("आपका सी कंपाइलर इन सी सुविधाओं का समर्थन करता है:") foreach(${CMAKE_CXX_COMPILE_FEATURES} में सुविधा) संदेश(सुविधा) Endforeach()ये विधियां आपको सी भाषा मानक और आपके सीएमके परियोजनाओं में उपयोग की जाने वाली सुविधाओं पर लचीलापन और नियंत्रण प्रदान करती हैं।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3