कैसे आसान स्रोत नियंत्रण के लिए मेरे Arduino परियोजनाओं की संरचना को व्यवस्थित करने के लिए?


75

इस सवाल का अच्छा जवाब ढूंढते हुए मुझे बहुत समय हो गया है।

आमतौर पर, किसी भी Arduino परियोजना लेकिन सबसे सरल एक में शामिल होंगे:

  • मुख्य स्रोत कोड फ़ाइल MyProject.ino
  • परियोजना के लिए विशिष्ट पुस्तकालय ( MyProjectLibrary1.h, MyProjectLibrary1.cpp...)
  • थर्ड-पार्टी लाइब्रेरी (आम तौर पर मुफ्त खुला स्रोत, मैन्युअल रूप से Arduino पुस्तकालयों निर्देशिका में जोड़ा जाता है)
  • स्कैमैटिक्स, पीसीबी आरेख
  • प्रलेखन
  • ...

यह सब स्रोत कोड प्रबंधन (जैसे कि तोड़फोड़, गिट या गिटहब) के तहत एक परियोजना के पूरे कोड और डॉक्टर को रखना मुश्किल बनाता है।

अपनी परियोजना के स्रोत नियंत्रण को प्रबंधित करने का अर्थ है कि परियोजना द्वारा उपयोग की जाने वाली सभी फाइलों के संस्करण का प्रबंधन करना जिसमें तृतीय-पक्ष पुस्तकालय शामिल हैं।

अब एक ही परियोजना के लिए, मुझे एक निर्देशिका संरचना को परिभाषित करने की आवश्यकता है जो:

  • ऊपर वर्णित के रूप में सभी परियोजना फाइलें शामिल हैं
  • मैं पूरी तरह से एक स्रोत कोड प्रबंधन उपकरण (तृतीय-पक्ष निर्भरता सहित) के लिए प्रतिबद्ध हो सकता हूं
  • मैं अपनी हार्ड ड्राइव पर कहीं भी चेकआउट कर सकता हूं और वहां से प्रोजेक्ट का निर्माण कर सकता हूं (क्या इसे एक ही स्थान पर रखना है जैसा कि Arduino IDE द्वारा लगाया गया है)
  • मैं एक आत्म-संग्रह में जा सकता हूं जिसे मैं अपने दोस्त को आसानी से बनाने के लिए भेज सकता हूं (कोई अतिरिक्त मैनुअल डाउनलोड नहीं)

Arduino प्रोजेक्ट्स के साथ मुझे विशेष रूप से मुश्किल लगता है जो बाहरी पुस्तकालयों की निर्भरता का प्रबंधन है। जावा प्रोजेक्ट डेवलपर्स के पास इसके लिए मावेन रिपॉजिटरी हैं और यह सभी बाहरी डिपो के प्रबंधन में बहुत मदद करता है। लेकिन हमारे पास Arduino पुस्तकालयों के लिए एक समकक्ष प्रणाली नहीं है।

मुझे यह जानने में दिलचस्पी होगी कि अन्य Arduino परियोजना निर्माता इन पहलुओं से अपनी परियोजनाओं में कैसे निपटते हैं।

यह भी ध्यान दें कि मैं अपनी विकास प्रक्रिया को बदलने के लिए खुला हूं, जिसमें मेरी IDE (वर्तमान में मैं ज्यादातर Arduino प्लगइन के साथ ग्रहण का उपयोग करता हूं, और फिर मैं सुनिश्चित करता हूं कि मेरी परियोजनाएं सीधे Arduino IDE के साथ भी काम कर सकती हैं)।


मैं भी इससे जूझता रहा हूं। मेरे पास दो परियोजनाएं हैं जिन्हें बाहरी पुस्तकालय के विभिन्न संस्करणों की आवश्यकता है, और वर्तमान में वे संस्करण नियंत्रण से बाहर हैं।
साइबरबर्ग

1
कृपया आगे के शोध पर ध्यान दें कि वे पैकेज मैनेजर हैं । जावास्क्रिप्ट को Node.js / npm और bower मिला, PHP को PEAR और संगीतकार, आदि मिला
kaiser

जवाबों:


30

एक आर्डिनो परियोजना के आयोजन का मेरा तरीका काफी सरल है, मेरी सभी परियोजना जीआईटी रिपॉजिटरी है ताकि कम से कम निम्नलिखित हों:

  • परियोजना /

मेरे पास मेरे पसंदीदा संपादक और एक मेकफाइल का उपयोग करने की प्राथमिकता है, जिसे मैंने अधिकांश उपयोग के मामलों के खिलाफ काम करने के लिए तैयार किया है (और मैंने उस पर भी सुधार किया है जिसे मैं जल्द ही साझा करने जा रहा हूं)।

पुस्तकालयों के लिए, मैं उन्हें अपने स्वयं के भंडार के रूप में रखना पसंद करता हूं और उन्हें परियोजना में शामिल करने के लिए गिट सबमॉड्यूल का उपयोग करता हूं। समुदाय द्वारा लिखित कई पुस्तकालयों को गिट रिपॉजिटरी के रूप में साझा किया जाता है, यह एक अच्छा सामान्य समाधान है। फिर, Makefile के भीतर, मुझे केवल उन पुस्तकालयों पथ को जोड़ना होगा जिन्हें मैं LOCALLIBS चर में शामिल करना चाहता हूं ।

हालाँकि, कुछ प्रोजेक्ट्स के लिए, यह प्रोजेक्ट के लिए तैयार किए गए हार्डवेयर एब्स्ट्रक्शन लेयर लाइब्रेरी में पुस्तकालयों को इनकैप्सुलेट करने के लिए समझ में आता है, तो मैं एक पथ का उपयोग करना पसंद करता हूं जैसे:

  • project
    • project.ino
    • Makefile
    • project_hal_lib
      • library1
      • library2
      • library3
      • ...

हालांकि, पुस्तकालयों को निर्दिष्ट करने के लिए arduino 1.5.xa नए तरीके के साथ पेशकश की जाती है, जो कि arduino परियोजनाओं को बनाने और बनाने का एक तरीका पेश करेगा, उसी तरह जैसे हम पहले से ही अजगर में virtualy और virtualenv के साथ करते हैं, यानी आप अपनी ज़रूरत के पुस्तकालयों के सेट को परिभाषित करते हैं और वे आपकी आवश्यकता है डाउनलोड करें


मैं इसी तरह के जवाब पर काम कर रहा था। आपने मुझे इसमें हरा दिया!
आशीष्र

+1 धन्यवाद! यह रास्ता काफी दिलचस्प लगता है। मुझे इसे इस सप्ताह आज़माना होगा (मुझे पहले यह जाँचने की ज़रूरत है कि मेकफाइल सामान को पहले कैसे सेटअप किया जाए)।
jfpoilpret

@AsheeshR अगर आपका जवाब समान था, इसका मतलब है कि यह अभी भी कुछ मतभेद है, है ना? मैं इन के बारे में जानना चाहूंगा!
jfpoilpret

वास्तव में मेरे मेकफाइल के अगले संस्करण के साथ आने वाले मुख्य परिवर्तन flashप्रोग्रामर का उपयोग करने या uploadबूटलोडर का उपयोग करने की क्षमता होगी । फर्मवेयर के साथ बूटलोडर के विलय को संभालने के साथ-साथ। मैंने इन-मेकफाइल फ्यूज सेटर भी लिखा।
15

@zmo इनाम योग्य है, हालांकि आपका Makefile समाधान मेरी स्थिति में काम नहीं कर सकता (विंडोज़ का उपयोग कर रहा था लेकिन मैंने उस बिंदु को निर्दिष्ट नहीं किया)। लेकिन मुझे विश्वास है कि मौजूदा मेफाइल सॉल्यूशंस में से किसी एक का उपयोग करना ही जाने का रास्ता है। एक बार मेरे लिए एक के बाद एक थ्रैट मिल गए तो मैं अपना जवाब यहां दूंगा।
jfpoilpret

23

ऐसा करने का सबसे सरल तरीका पुस्तकालय के हेडर और कोड फ़ाइलों को अपने स्रोत निर्देशिका में कॉपी करना और उन्हें शामिल करना है।

myproject/
    myproject.ino
    somelib.h
    somelib.cpp

अपने कोड में, आप कर सकते हैं include "somelib.h"

इस के लिए नीचे की ओर यह है कि पुस्तकालयों को एक ही फ़ोल्डर में होना चाहिए, उप फ़ोल्डर नहीं, इसलिए यह आपकी निर्देशिका को गड़बड़ कर देता है।


मेरी पूरी परियोजना की निर्देशिका संरचना के बारे में, जिसमें योजनाबद्ध और प्रलेखन शामिल हैं, मेरा आमतौर पर इस तरह दिखता है:

myproject/
  schematics/ - eagle files or whatever you may have
  docs/       - include relevant datasheets here
  test/       - any test cases or other code to test parts of the system.
  myproject/  - since Arduino code must be in a directory of the same name
    myproject.ino
    ...

एक और नकारात्मक पहलू यह है कि मुझे कई परियोजनाओं पर समान पुस्तकालयों की नकल करनी होगी। इसके अलावा, यह मेरे लिए स्पष्ट नहीं है कि क्या आप केवल अपने पुस्तकालयों को वहां या तीसरे पक्ष के पुस्तकालयों में रखते हैं?
jfpoilpret

पहला बिंदु: यह वास्तव में एक नीचे की तरफ नहीं है, यह पुस्तकालयों और परियोजना स्रोत को एक साथ रखने का एक पक्ष प्रभाव है जैसा कि आप संस्करण नियंत्रण के साथ चाहते थे। क्या होगा यदि किसी अन्य परियोजना को पुस्तकालय के अद्यतन संस्करण की आवश्यकता है? अगर आपने इसे संशोधित किया तो क्या होगा? दूसरा बिंदु: दोनों काम करेंगे।
साचलेन

1
मैं नहीं। Arduino IDE कई मायनों में काफी सीमित है। आप काम करने के लिए बेहतर माहौल में देखना चाहते हैं, इसके लिए बेहतर समर्थन मिल सकता है। लोगों ने कस्टम मेक फाइलें बनाई हैं जो आपको अन्य स्रोतों से भी पुस्तकालयों को आयात करने देती हैं।
साचलेन

1
यह सॉफ्टवेयर लाइसेंस के दृष्टिकोण से परियोजनाओं को व्यवस्थित करने का एक अच्छा तरीका नहीं है। यदि आप अपने प्रोजेक्ट में थर्ड-पार्टी लाइब्रेरी शामिल कर रहे हैं, जिसके पास अलग-अलग लाइसेंस हो सकते हैं, तो जैसे ही आप प्रोजेक्ट फाइल साझा करना शुरू करेंगे, तो आप उनका उल्लंघन कर सकते हैं। विभिन्न खुले स्रोत लाइसेंस आमतौर पर एक दूसरे के साथ संगत नहीं होते हैं ।
एशेश्र

3
@AsheeshR आपकी सभी फाइलों को एक डायरेक्टरी में रखता है इसलिए Arduino IDE को शिकायत नहीं है कि यह प्रोजेक्ट्स को व्यवस्थित करने का एक अच्छा तरीका नहीं है। यह सिर्फ एक तरीका है। एक बेहतर समाधान का प्रस्ताव करने के लिए स्वतंत्र महसूस करें। मैं एक भी नहीं जानता, जो अभी भी आपको Arduino सॉफ़्टवेयर का उपयोग करने की अनुमति देता है।
sachleen

20

जब कई नेस्टेड रिपॉजिटरी आयोजित करने की बात आती है तो गिट सबमॉड्यूल बेहद शक्तिशाली होते हैं। विभिन्न स्रोतों से कई पुस्तकालयों को संभालना, और यहां तक ​​कि अपनी खुद की परियोजना के कुछ हिस्सों को संभालना जो विभिन्न स्रोतों पर संग्रहीत हो सकते हैं, गिट सबमॉड्यूल के साथ आसान हो जाता है।

निर्देशिका संरचना

अपनी परियोजनाओं को व्यवस्थित करने का एक तरीका होगा:

  • प्रोजेक्टए - मूल निर्देशिका

    • ProjectA - स्रोत कोड निर्देशिका जिसमें Arduino कोड है

      1. projectA.ino
      2. header.h
      3. implementation.cpp
    • डॉक्स - आपका मुख्य प्रलेखन निर्देशिका

    • स्कीमैटिक्स - इन्हें अलग-अलग गिट रेपो या एक ही रेपो के हिस्से पर अलग-अलग रखा जा सकता है

    • libs - इसमें आपकी तृतीय पक्ष लाइब्रेरी शामिल होगी।

      1. libA - इन्हें तीसरे पक्ष के भंडार के रूप में बनाए रखा जा सकता है
      2. libC - ...
    • लाइसेंस

    • README

    • Makefile - निर्देशिकाओं पर निर्भरता को संभालने के लिए आवश्यक है

कार्यप्रवाह

जहां तक ​​मुख्य रिपॉजिटरी का संबंध है, आप बदलावों के अपने सामान्य चक्र का पालन करें, जोड़ें और कमिट करें। सब-रिपॉजिटरी के साथ चीजें दिलचस्प हो जाती हैं।

आपके पास अपने मुख्य भंडार के मूल निर्देशिका में एक भंडार जोड़ने का विकल्प है। इसका मतलब यह है कि आप में से कोई भी डायरेक्टरी स्ट्रक्चर यानी डॉक्स, स्कीमैटिक आदि को अलग रिपॉजिटरी के रूप में बनाए रखा जा सकता है और इससे लगातार अपडेट किया जा सकता है।

आप git submodule add <repo.git>कमांड का उपयोग करके ऐसा कर सकते हैं । इसे अद्यतित रखने के लिए, आप उपयोग कर सकते हैं git submodule update <path>

जब यह आपकी रिपॉजिटरी के भीतर कई थर्ड पार्टी लाइब्रेरियों को बनाए रखने की बात आती है, ताकि प्रत्येक को स्वयं में नियंत्रित किया जा सके या जरूरत पड़ने पर प्रत्येक को अद्यतित रखा जा सके, तो git सबमॉड्यूल फिर से आपका दिन बचाता है!

Libs में थर्ड पार्टी रेपो जोड़ने के लिए, कमांड का उपयोग करें git submodule add <lib1.git> libs/lib1। फिर, रिलीज चक्र में एक निश्चित बिंदु पर लाइब्रेरी को बनाए रखने के लिए, लाइब्रेरी की जांच करें और एक कमिट करें। लाइब्रेरी को अद्यतित रखने के लिए, कमांड का उपयोग करें git submodule update <path>

अब, आप मुख्य रिपॉजिटरी के साथ-साथ रिलीज़ के अपने स्वतंत्र चरणों में कई थर्ड पार्टी लाइब्रेरी में कई रिपॉजिटरी बना सकते हैं।

बनाम एकल निर्देशिका दृष्टिकोण

जबकि एकल निर्देशिका दृष्टिकोण सबसे सरल है, बहुत अधिक दर्द के बिना निर्देशिका के नियंत्रण भागों को संस्करणित करना संभव नहीं है। इसलिए, सरल दृष्टिकोण परियोजना में अलग-अलग राज्यों के साथ विभिन्न रिपॉजिटरी को समायोजित करने में विफल रहता है।

यह दृष्टिकोण कई रिपॉजिटरी को बनाए रखने की अनुमति देता है, लेकिन संकलन और लिंकिंग प्रक्रिया को संभालने के लिए मेकफाइल की आवश्यकता को लाता है।

आपकी परियोजना की जटिलता के आधार पर, इष्टतम दृष्टिकोण का चयन किया जा सकता है।


1
+1, लेकिन सिर्फ एक विचार के रूप में: Git Submodules बहुत अस्थिर और संभावना ढीले ट्रैक हैं। यदि आप एक ही निर्देशिका या गुणकों (तरह का उपयोग यह कोई फर्क नहीं पड़ता vendor, node_modules, आदि)। Git उन्हें संदर्भित करता है और इसका ट्रैक रखता है।
kaiser

"यदि आप एकल निर्देशिका या गुणक (जैसे विक्रेता, नोड_मॉड्यूल्स, आदि) का उपयोग करते हैं तो इससे कोई फर्क नहीं पड़ता।" मुझे यह हिस्सा समझ नहीं आया। क्या आप विस्तृत कर सकते हैं?
आशिष्र

17

इस तरह से मैंने अपनी परियोजनाओं के लिए आखिरकार फैसला किया।

Arduino-CMake

मेरा पहला महत्वपूर्ण निर्णय एक बिल्ड टूल का चुनाव था, जो मेरे पर्यावरण (विंडोज) के लिए काम कर सकता था, लेकिन यह सीमित नहीं था (मैं चाहता हूं कि मेरी परियोजनाएं आसानी से अन्य लोगों द्वारा पुन: प्रयोज्य हो जाएं)।

मैंने विभिन्न खुले स्रोत Arduino बनाने के उपकरण का परीक्षण किया है:

  • गाइजमो मेकफाइल (@zmo उत्तर द्वारा सुझाया गया): यह सिर्फ एक मानक मेकफाइल है जिसे आर्कडिनो बनाता है; यह एक यूनिक्स मेकफाइल है लेकिन विंडोज के लिए यूनिक्स मेक का एक अच्छा पोर्ट है; फिर भी, दुर्भाग्य से यह मेकफाइल केवल यूनिक्स के लिए काम करता है, बेशक इसे विंडोज के लिए अनुकूलित किया जा सकता था, लेकिन मुझे एक उपकरण चाहिए था जो "बॉक्स से बाहर" काम करता है।
  • Arduino-Makefile (@adnues उत्तर द्वारा सुझाया गया): यह एक अधिक उन्नत परियोजना है, जो Unix Makefile पर आधारित है, जिसका उद्देश्य सभी Arduino परियोजनाओं द्वारा आसानी से पुन: प्रयोज्य होना है; इसे मैक, लिनक्स और विंडोज पर काम करने के रूप में प्रलेखित किया गया है, लेकिन विंडोज समर्थन मेरे पहले प्रयोगों (यूनिक्स शेल पर कई निर्भरता) में गलत साबित हुआ।
  • ग्रैडिनो (किसी भी उत्तर द्वारा सुझाया नहीं गया है): यह बिल्ड टूल ग्रूवी दुनिया केजाने-माने ग्रेडेल बिल्ड टूलपर आधारितहै; उपकरण काफी अच्छी तरह से किया गया लगता है, लेकिन इसके लिए थोड़े (थोड़े) ग्रूवी / ग्रेडेल नॉलेज की आवश्यकता होती है, और इसमें केवल बहुत कम दस्तावेज होते हैं; मैंने इसके लिए सिर्फ ग्रूवी और ग्रेडल स्थापित करने के बोझ के कारण इसके साथ नहीं जाने का फैसला किया (मैं उन लोगों से बहुत पहले से बचना चाहता हूं जो अपने वातावरण पर मेरी परियोजनाओं का निर्माण करना चाहते हैं)।
  • Arduino-CMake (किसी भी उत्तर द्वारा सुझाया नहीं गया): यह सबसे अच्छा लगता है, इसका एक लंबा इतिहास है, कई समर्थक और अनुचर हैं, बहुत अच्छी तरह से प्रलेखित है, सरल उदाहरणों के साथ आता है और कुछ अच्छे ट्यूटोरियल ब्लॉग पोस्ट भी हैं वेब, जैसे यहाँ और वहाँ । यह सीएमके पर आधारित है, जो "क्रॉस-प्लेटफ़ॉर्म मेक" है।

मैंने ArduinoDevel भी पाया है , एक अन्य Arduino बिल्ड टूल -जिसका मैंने प्रयोग नहीं किया है- जो यूनिक्स मेकफाइल्स या चींटी build.xml फाइलें उत्पन्न कर सकता है ; यह दिलचस्प लग रहा था लेकिन कार्यक्षमता के मामले में थोड़ा सीमित है।

अंत में मैंने Arduino-CMake के साथ जाने का फैसला किया :

  • इसे सेटअप करना आसान था: बस अपनी मशीन पर CMake इंस्टॉल करें और Arduino-CMake को कुछ डायरेक्टरी में कॉपी करें जो आपके प्रोजेक्ट निर्देशिका से आसानी से सुलभ (रिश्तेदार पथों के माध्यम से) हो।
  • उदाहरणों ने मेरे लिए बॉक्स से बाहर काम किया (बस CMakeLists.txtअपने वातावरण के लिए आवश्यक गुणों को अनुकूलित करने के लिए कॉन्फ़िगरेशन फ़ाइल में टिप्पणियों का पालन किया , जैसे कि Arduino प्रकार, सीरियल पोर्ट)
  • आप किसी भी तरह से अपनी परियोजनाओं को व्यवस्थित कर सकते हैं
  • यह विभिन्न बिल्ड टूल्स के लिए कॉन्फ़िगरेशन फाइल उत्पन्न कर सकता है (मैंने केवल यूनिक्स मेकफाइल्स का परीक्षण किया है ), जिसमें एक्लिप्स प्रोजेक्ट भी शामिल हैं।
  • जेनरेट मेक में, समर्थन के लिए कई लक्ष्य प्राप्त होते हैं:

    • पुस्तकालयों का निर्माण
    • कार्यक्रम बनाते हैं
    • बोर्ड पर कार्यक्रम अपलोड
    • सीरियल मॉनीटर लॉन्च
    • और कुछ अन्य जिन्हें मैंने अभी तक परीक्षण नहीं किया है

प्रोजेक्ट संरचना

चूंकि Arduono-CMake आपके प्रोजेक्ट के लिए कोई डायरेक्टरी स्ट्रक्चर नहीं लगाता है, आप वही चुन सकते हैं जो आपको सबसे अच्छा लगे।

यहाँ मैंने वैयक्तिकृत किया है (जो अभी भी और परिशोधन की आवश्यकता है, लेकिन मैं अब इससे खुश हूँ):

यहाँ छवि विवरण दर्ज करें

मैंने अपनी सभी परियोजनाओं को एक आम arduino-stuffनिर्देशिका के तहत रखने का फैसला किया है (जो कि मैं पूरी तरह से जीथब के लिए प्रतिबद्ध हूं, मुझे पता है कि मैं जीथब पर बेहतर संगठन के लिए गिट सबमॉड्यूल का उपयोग कर सकता हूं , लेकिन अभी तक जांच करने का कोई समय नहीं था)।

arduino-stuff निम्नलिखित सामग्री है:

  • build: कि एक निर्देशिका है जहाँ cmake और बनाने के लिए अपने सभी सामान (makefiles, कैश, ऑब्जेक्ट फ़ाइलें ...) पैदा करेगा; यह ओथ जीथुब के लिए प्रतिबद्ध है
  • cmake: वह एक Arduino-CMake cmake डायरेक्टरी की सिर्फ एक कॉपी ( अनमॉडिफाइड ) है । यह एक जीथब पर मिलता है ताकि यह किसी के लिए आसान हो जो मेरी परियोजनाओं का निर्माण करना चाहता है
  • CMakeLists.txt: यह "वैश्विक" CMake कॉन्फ़िगरेशन है जो मेरे वातावरण (बोर्ड, सीरियल पोर्ट) के लिए सभी डिफॉल्ट्स की घोषणा करता है और बिल्ड लक्ष्य लक्ष्य सूची की सूची
  • TaskManager: यह Arduino-CMake पर आधारित मेरी पहली परियोजना है, यह एक उदाहरण के साथ एक पुस्तकालय है; इस सुधारात्मक में वह भी शामिल है CMakeLists.txtजो परियोजना के लिए लक्ष्य बताता है

सुधार करने के लिए अंक

वर्तमान समाधान हालांकि सही नहीं है। मेरे द्वारा देखे जाने वाले सुधारों के बीच (अगर वे फिट हैं तो इन सुधारों को शामिल करने के लिए अरडिनो-सीएमके परियोजना के लिए)

  • वर्तमान परियोजना से Arduino पुस्तकालयों निर्देशिका के लिए एक पुस्तकालय निर्देशिका की प्रतिलिपि बनाने की सुविधा
  • लाइब्रेरी को जीथब पर अपलोड करने की सुविधा
  • जीथब से लाइब्रेरी डाउनलोड करने की सुविधा

2
क्या आपने अभी तक PlatformIO की कोशिश की है? जब आप यह सवाल पूछ रहे थे, तब यह आसपास नहीं रहा होगा .. platformio.org
ओहोरोब

4
MyProject
|_MyProject
  |_MyProject.ino
  |_data
  |  |_documentation 
  |  |_PCB
  |  |_schematics
  |_src
     |_MyProjectLibrary1
     |_ThirdPartyLibrary

MyProject फ़ोल्डर (रिपॉजिटरी रूट)

कारण जो मुझे प्रतीत होता MyProjectहै कि निरर्थक रूट फ़ोल्डर का सुझाव है कि आपने GitHub का उपयोग किया है। जब आप (क्लोन के बजाय) डाउनलोड करते हैं तो GitHub रिपॉजिटरी की सामग्री शाखा या टैग नाम को रिपॉजिटरी नाम से जोड़ दिया जाता है (जैसेMyProject-master)। Arduino IDE के लिए आवश्यक है कि स्केच फ़ोल्डर नाम स्केच फ़ाइल नाम से मेल खाता हो। यदि आप एक .ino फ़ाइल को खोलते हैं जो उस फ़ोल्डर में है जो स्केच नाम से मेल नहीं खाती है तो Arduino IDE प्रांप्ट करता है कि आप एक उचित रूप से नामित स्केच फ़ोल्डर बनाएँ और स्केच को उस फ़ोल्डर में ले जाएँ। उपयोगकर्ता के लिए यह एक बहुत अच्छा प्रारंभिक अनुभव नहीं होने के अलावा, अधिक से अधिक समस्या यह है कि Arduino IDE अन्य सभी संबंधित फ़ाइलों को नए बनाए गए फ़ोल्डर में कॉपी नहीं कर सकता है, जो प्रोग्राम को अब संकलित नहीं कर सकता है। स्केच को एक सबफ़ोल्डर में रखकर आप स्केच फ़ोल्डर के नाम को बदलने के लिए GitHub से बचें।

यदि आपके लिए GitHub फ़ाइल नाम चीज़ कोई समस्या नहीं है, तो अनावश्यक रूट फ़ोल्डर आवश्यक नहीं है।

डेटा फ़ोल्डर

मैं dataआपकी गैर-कोड फ़ाइलों के लिए सबफ़ोल्डर का उपयोग करने की सलाह देता हूं क्योंकि Arduino IDE में उस नाम के सबफ़ोल्डर्स का एक विशेष उपचार है। जब आप फ़ाइल> सेव अस ... करते हैं तो उन्हें नए स्थान पर कॉपी कर लिया जाता है । किसी भी अन्य नाम के सबफ़ोल्डर नहीं हैं।

src फ़ोल्डर

srcसबफ़ोल्डर अनुमति देने का विशेष गुण है पुनरावर्ती संकलन । इसका मतलब है कि आप पुस्तकालयों को उस फ़ोल्डर में छोड़ सकते हैं और उन्हें अपने स्केच से इस तरह शामिल कर सकते हैं:

#include "src/MyProjectLibrary1/MyProjectLibrary1.h"
#include "src/ThirdPartyLibrary/ThirdPartyLibrary.h"

Arduino 1.5 लाइब्रेरी प्रारूप फ़ोल्डर संरचना भी समर्थित है, आप केवल अपने समायोजित करने की आवश्यकता #includeके हिसाब से बयान।

ध्यान दें कि केवल Arduino IDE 1.6.10 (arduino- बिल्डर 1.3.19) और नए समर्थन पुनरावर्ती स्केच संकलन।

दुर्भाग्य से कुछ पुस्तकालयों में #includeस्थानीय फ़ाइल के लिए गलत सिंटैक्स का उपयोग होता है (जैसे के #include <ThirdPartyLibrary.h>बजाय #include "ThirdPartyLibrary.h")। यह तब भी काम करता है जब लाइब्रेरी को Arduino librariesफ़ोल्डर में से किसी एक पर इंस्टॉल किया जाता है लेकिन लाइब्रेरी स्केच के साथ बंडल होने पर काम नहीं करता है। इसलिए कुछ पुस्तकालयों को इस तरह से उपयोग करने के लिए मामूली संपादन की आवश्यकता हो सकती है।

मैं इसे स्केच फ़ोल्डर की जड़ में सभी लाइब्रेरी फ़ाइलों को डंप करने के विकल्प के लिए बहुत पसंद करता हूं क्योंकि यह गन्दा है और हर लाइब्रेरी फ़ाइल को Arduino IDE में टैब के रूप में दिखाया जाएगा जब आप स्केच खोलते हैं (बेशक किसी भी स्रोत फ़ाइलों को करते हैं Arduino IDE से संपादन योग्य होना चाहिए, इसे स्केच रूट फ़ोल्डर में रखा जाना चाहिए)।

जगह-जगह बंडल किए गए पुस्तकालयों का उपयोग करने में सक्षम होना आपके अन्य लक्ष्यों के अनुरूप है:

जितना संभव हो उतने आसानी से बनाने के लिए एक दोस्त को भेजें

पुस्तकालयों को मैन्युअल रूप से स्थापित करने की आवश्यकता को हटाने से परियोजना का उपयोग करना बहुत आसान हो जाता है।

यह उसी नाम की लाइब्रेरी फ़ाइलों के अन्य संस्करणों के साथ संघर्ष की किसी भी संभावना से बच जाएगा जो पहले स्थापित हो सकती है।


3

आप Arduino कोड संकलन करने के लिए मेकफाइल https://github.com/sudar/Arduino-Makefile का उपयोग कर सकते हैं । आपको आईडीई की आवश्यकता नहीं है।


1
मैंने कोशिश की है लेकिन दुर्भाग्य से यह केवल यूनिक्स मशीनों पर काम करेगा और मुझे विंडोज समर्थन की आवश्यकता है। वर्तमान में मैं CMake पर आधारित एक अन्य परियोजना का मूल्यांकन कर रहा हूं, लेकिन अभी तक इसके साथ नहीं किया गया है। जब मैंने किसी टूल पर निर्णय लिया है तो मैं एक उत्तर पोस्ट करूंगा।
jfpoilpret

0

शायद खेल के लिए वास्तव में देर हो गई है लेकिन यह पहले से ही पोस्ट किए गए लोगों की तुलना में थोड़ा अलग तरीकों का उपयोग करके जवाब देने के लिए एक लोकप्रिय पर्याप्त प्रश्न है।

यदि आपको सीधे Arduino IDE के साथ अनुकूलता बनाए रखने की आवश्यकता है, तो आप कुछ का उपयोग कर सकते हैं, जैसा कि मैंने यहां बताया है:

https://gitlab.com/mikealger/ExampleArduinoProjectStructure/tree/master/ExampleSketchBook

मैं Arduino - परियोजना संरचना और निर्माण की प्रक्रिया के नोटों के आधार पर यह सबसे अधिक आधारित है , और कुछ सुझाव जो मैंने वर्षों से उठाए हैं।

मैं वास्तव में नहीं जानता कि यह सीधे Arduino पृष्ठों के माध्यम से खोजने के लिए इतना कठिन क्यों है, यह मूर्खतापूर्ण रूप से एक अर्ध पेशेवर पृष्ठभूमि से आता है कि निर्माण प्रक्रिया इतनी अप्रिय है।

वहाँ बाहर शुभकामनाएँ


गिटलैब लिंक टूटा हुआ प्रतीत होता है
ग्रीननलाइन

अजीब यह सीधा लिंक के साथ काम करता है? यानी gitlab.com/mikealger/ExampleArduinoProjectStructure
माइक अल्जीरिया

वास्तव में दोनों लिंक फ़ायरफ़ॉक्स में काम करते हैं, लेकिन न तो मेरे पुराने क्रोम संस्करण 49.0.2623.112 (64-बिट) में काम करते हैं। मुझे चिंता करने की कोई बात नहीं है। :-)
ग्रीनोनलाइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.