सबसे पहले, सेमेक सिंटैक्स वास्तव में सरल है। इसमें "कमांड" और "तर्क" शामिल हैं। यह इतना आसान है कि इसमें डुबकी लगने में कुछ समय लगता है। सब कुछ "आदेश (तर्क)" है। इसके अतिरिक्त, कमांड नाम केस-असंवेदनशील होते हैं। पहले उन्हें सभी सीएपीएस होना था, लेकिन संस्करण 2.6 (मुझे लगता है) के बाद से कोई फर्क नहीं पड़ता। हालांकि तर्क केस-संवेदी हैं।
cmake_minimum_required (VERSION 2.6)
यह आदेश किसी परियोजना के लिए सेमेक के न्यूनतम आवश्यक संस्करण को सेट करता है। यदि cmake का वर्तमान संस्करण 2.6 से कम है तो यह प्रसंस्करण बंद कर देगा और एक त्रुटि की रिपोर्ट करेगा। यह उपकरण के प्राचीन संस्करणों का समर्थन करने से रोकता है।
set (CMAKE_BACKWARDS_COMPATIBILITY 2.6)
वैरिएबल CMAKE_BACKWARDS_COMPATIBILITY को मान 2.6 पर सेट करें। यह वास्तव में आपके द्वारा प्रस्तुत CMakeLists.txt फ़ाइल में एक मामूली बग है, क्योंकि CMAKE_BACKWARDS_COMPATIBILITY का उपयोग 2.6 और उसके बाद के लिए नहीं किया जाना चाहिए। स्क्रिप्ट शायद cmake_policy
का उपयोग करना चाहिए। यह निर्दिष्ट करना है कि सेमेक के पिछले संस्करणों में असंगतताओं का सामना करते समय सेमीकेक के नए संस्करणों का व्यवहार कैसे करना चाहिए। आज स्क्रैच से लिखने वाली कोई भी स्क्रिप्ट इस बारे में चिंता करने की आवश्यकता नहीं होगी।
Project(${PLUGIN_NAME})
जो कुछ चर PLUGIN_NAME
में है के मूल्य के प्रोजेक्ट का नाम सेट करता है। यह मान कुछ आईडीई में प्रोजेक्ट नाम के रूप में दिखाया गया है। एक चर को मान लिखने के लिए, आप set(PLUGIN_NAME myName)
का उपयोग कर सकते हैं और ${}
सिंटैक्स का उपयोग करने वाले मान को पढ़ने के लिए: "${PLUGIN_NAME}"
का उपयोग कर सकते हैं। कुछ आदेश भी वैरिएबल को भी लिखते हैं, लेकिन आप उन्हें set
कमांड के समान तरीके से उपयोग करते हैं।
file (GLOB GENERAL RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
[^.]*.cpp
[^.]*.h
[^.]*.cmake
)
file
एक आदेश है। इसका पहला तर्क GLOB
का अर्थ है "डिस्क पर फ़ाइलों को वापस करें जिनके नाम पैटर्न के अनुरूप हैं जो मैं तर्क के रूप में दूंगा"। अगला तर्क GENERAL
वह चर है जो परिणाम set
के साथ संग्रहीत किया जाता है, यह परिणाम वैरिएबल को लिखता है और बाद में आप ${GENERAL}
के साथ इसे पढ़ सकते हैं। RELATIVE
और पथ का अर्थ उस पथ से संबंधित फ़ाइल नामों को वापस करना है, पूर्ण पथ नहीं। तो "सी: \ कुछ \ long \ path \ src \ foo.cpp" या "/home/me/some/path/src/foo.cpp" के बजाय आपको "src \ foo.cpp" या "src/foo.cpp "। परिवर्तनीय CMAKE_CURRENT_SOURCE_DIR एक "जादू चर" है जो सीएमके आपके लिए भरता है और यह वर्तमान में संसाधित होने वाली स्रोत निर्देशिका के पथ को संदर्भित करता है, जहां यह CMakeLists.txt फ़ाइल रहता है। तर्कों की अंतिम सूची उन फ़ाइलों के पैटर्न हैं जिनसे मिलान किया जाएगा। असल में, कुछ भी जो फ़ाइल एक्सटेंशन cpp, h या cmake है।
include_directories(${PLUGIN_INCLUDE_DIRS})
फ़ाइलों में शामिल हैं के लिए संकलक द्वारा खोजा गया उन लोगों के लिए ${PLUGIN_INCLUDE_DIRS}
में निर्देशिका जोड़ें। उदाहरण के लिए, यदि आप gcc के साथ संकलित करते हैं तो इसका अतिरिक्त "-I" तर्क होगा।
# Generated files are stored in ${GENERATED} by the project configuration
# से शुरू होने वाली रेखाएं टिप्पणियां हैं।
SET_SOURCE_FILES_PROPERTIES(
${GENERATED}
PROPERTIES
GENERATED 1
)
फ़ाइलों के साथ जुड़े कुंजी/मूल्य जोड़े हो सकते हैं, और इससे यह प्रभावित होता है कि वे कैसे बनाए जाते हैं। यहां परिवर्तनीय ${GENERATED}
में सूचीबद्ध फ़ाइलों में "GENERATED" संपत्ति को मूल्य 1 पर सेट किया गया है। इसका क्या अर्थ है? खैर, सीएमके अब डिस्क पर "$ {GENERATED}" फ़ाइलों को न देखने के बारे में जानता है, क्योंकि वे किसी अन्य निर्माण चरण में बनाए जाएंगे। स्निपेट पोस्ट किए गए, कोई भी चर ${GENERATED}
सेट करता है। मुझे कल्पना है कि यह परियोजना फाइलों में कहीं और सेट हो जाता है। संपत्ति के साथ परिवर्तनीय ${GENERATED}
मिश्रण न करें! यह एक सूक्ष्म बिंदु है, और संभवतया परिवर्तनीय GENERATED_FILES
भ्रम से बचने के लिए होना चाहिए, यानी SET_SOURCE_FILES_PROPERTIES(${GENERATED_FILES} PROPERTIES GENERATED 1)
।
SOURCE_GROUP(Generated FILES ${GENERATED})
यह एक समूह है, जो दृश्य स्टूडियो में एक फ़ाइल टैब में तब्दील हो, बुलाया "जनरेट किया गया" है कि चर ${GENERATED}
में फ़ाइलें हैं पैदा करता है।
SET(SOURCES ${GENERAL} ${GENERATED})
इस लाइन जो कुछ चर ${GENERAL}
और ${GENERATED}
में है करने के लिए चर स्रोत सेट। इससे पहले हमने वर्तमान स्रोत निर्देशिका में मौजूद सीपीपी, एच और सेमेक फाइलों की सूची होने के लिए ${GENERAL}
सेट किया था। सी-जैसे छद्म कोड में यह "स्रोत = सामान्य + सामान्य" जैसा है। कार्यान्वयन के विवरण के रूप में, मूल्य SOURCES वास्तव में एक सूची है और इसकी सामग्री ";" से अलग होती है वर्ण। आम तौर पर ऐसा किया जाता है ताकि बाद में आप हर 2 अन्य चर को दोहराने के बजाय परिवर्तनीय ${SOURCES}
का उपयोग कर लाइब्रेरी या निष्पादन योग्य बना सकें।
धन्यवाद! काश मैं आपको एक से अधिक वोट दे सकता हूं। यह एक जबरदस्त मदद है। –