मैंने हाल ही में एक लंबे समय से चले गए डेवलपर के अस्पष्ट और गलत निर्माण निर्देशों के बाद एक सी ++ प्रोजेक्ट के लिए बहुत समय बिताया है जिस पर मैं काम कर रहा हूं। इसलिए, मैं एक नई बिल्ड सिस्टम लिख रहा हूं और मैं इसे करने का सबसे अच्छा तरीका ढूंढ रहा हूं। मैंने परियोजना लक्ष्यों से पहले निर्भरता एकत्र करने और निर्माण करने के लिए सीएमके में ExternalProject_Add
कमांड का उपयोग करने पर समझौता किया है, लेकिन मुझे एक उत्कृष्ट लेख git सबमॉड्यूल के उपयोग का सुझाव देता है, जो ऐसा लगता है कि यह बहुत समान करता है, यदि समान नहीं है। तो मेरा प्रश्न: git submodules और ExternalProject_Add?
1 उत्तर
आप git सबमॉड्यूल के बिना ExternalProject_Add
का उपयोग कर सकते हैं:
if (SPECIAL_CASE)
include (ExternalProject)
ExternalProject_Add (
project1
PREFIX project1
GIT_REPOSITORY "https://github.com/project.git"
GIT_TAG "v1"
)
endif ()
project
को CURRENT_BINARY_DIR
में क्लोन किया जाएगा, मुख्य प्रोजेक्ट निर्माण से पहले स्थानीय सिस्टम में बनाया और स्थापित किया जाएगा। आपका मुख्य प्रोजेक्ट वैश्विक दायरे से #include <project/header.h>
का उपयोग करेगा। यह समाधान केवल लोकप्रिय परियोजनाओं के लिए उपयुक्त है, जो लक्ष्य ऑपरेटिंग सिस्टम के भाग के लिए निर्भरता के रूप में उपलब्ध हैं। आप गारंटी दे सकते हैं कि आपके लक्षित सिस्टम को निर्भरता का आवश्यक संस्करण प्राप्त होगा।
उदाहरण के लिए, openssl
को देखें, आपके स्थानीय सिस्टम में यह लाइब्रेरी 100% स्थापित है। आपकी लक्षित ऑपरेटिंग सिस्टम सूची में मूल Win32
(बिना MinGW
या CygWin
) शामिल हैं। Win32
के लिए openssl
की सभी उपलब्ध रिलीज़ बहुत पुरानी हैं, आप Win32
के लिए openssl
इंस्टॉलर का आवश्यक संस्करण नहीं ढूंढ पाएंगे। तो आप बिना सबमॉड्यूल के #include <openssl/ssl.h>
के साथ if (WIN32) ExternalProject_Add
का उपयोग कर सकते हैं। आपके प्रोजेक्ट में openssl
सबमॉड्यूल जोड़ने का कोई मतलब नहीं है।
कृपया निम्न उदाहरण की समीक्षा करें।
यदि बाहरी project
लोकप्रिय नहीं है, लोकप्रिय पैकेज प्रबंधकों में उपलब्ध नहीं है (जैसे rpm, deb, ebuilds, आदि) तो सबमॉड्यूल का उपयोग करना बेहतर है।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।
git submodules
git
उपयोगिता द्वारा प्रदान किया गया है,ExternalProject_Add
सीएमके द्वारा प्रदान किया गया है। वे "समान चीज़" कैसे हो सकते हैं? क्या आप CMake प्रोजेक्ट में बाहरी निर्भरता को संभालने के लिए इन कार्यात्मकताओं की तुलना करना चाहते हैं? मुझे यकीन नहीं है कि प्रोप। और विपक्ष। अनुरोध स्टैक ओवरफ़्लो पर विषय पर है और इसका ठीक से उत्तर दिया जा सकता है। BTW,ExternalProject_Add
के बजाय यहFetchContent
कार्यक्षमता है जोgit submodules
द्वारा प्रदान की गई कार्यक्षमता के समान है। यह मुख्य रूप से प्रोजेक्ट के डेवलपर पर निर्भर करता है कि वहFetchContent
याgit submodules
में से किसी एक को चुनें।