स्थानीय पुस्तकालयों लोड हो रहा है


14

मैं Arduino / C विकास (जावास्क्रिप्ट / रूबी वातावरण से आने वाला) के लिए नया हूं, लेकिन मैं सोच रहा था कि क्या स्केच के भीतर कस्टम फ़ोल्डर से लाइब्रेरी को शामिल करना संभव है?

तो यह मेरी स्थिति है;

project.ino
libs/
  MyNewLib/
    MyNewLib.h
    MyNewLib.ccp

अब मेरा सवाल है: मैं अपनी कस्टम लाइब्रेरी कैसे शामिल कर सकता हूं? मैंने इस पर कई बदलावों की कोशिश की है;

# project.ino

#include <libs/MyNewLib/MyNewLib.h>
#include "libs/MyNewLib/MyNewLib.h"
#include <./libs/MyNewLib/MyNewLib.h>
#include "./libs/MyNewLib/MyNewLib.h"

लेकिन उनमें से कोई भी काम नहीं करता है। क्या कोई मुझे बता सकता है कि क्या यह संभव है? मैंने इस प्रश्न को वेब के चारों ओर देखा है, लेकिन मुझे कोई संतोषजनक उत्तर नहीं मिला। उम्मीद है कि आप लोग मदद कर सकते हैं।

चीयर्स।

अपडेट करें

मुझे पता है कि आप अपने पुस्तकालयों को अपने वैश्विक पुस्तकालयों के फ़ोल्डर में रख सकते हैं, लेकिन मैं उन्हें अपने स्थानीय प्रोजेक्ट फ़ोल्डर में चाहता हूं। मैं अपनी टीम के साथ उन्हें साझा करना चाहता हूं।


4
कृपया मेरे प्रश्न को फिर से पढ़ें @Tyson मुझे वैश्विक पुस्तकालयों के समाधान के बारे में पता है, लेकिन मैं उन्हें अपनी परियोजना के अंदर चाहता हूं।
स्टीफन

आपको सबसे पहले आईडीई को बताना होगा कि लाइब्रेरी को कहां ढूंढना है (पूर्व लिंक देखें) फिर अपने स्केच के भीतर आप लाइब्रेरी को कॉल करें। `#include <LibraryName.h>` AFAIK आप दोनों को एक ही includeपथ को निर्दिष्ट करने में / / से / पुस्तकालय / जो कि मुझे लगता है कि आप पूछ रहे हैं जोड़ नहीं सकते हैं।
टायसन

1
ठीक है, इसलिए मैं सबफ़ोल्डर्स की फ़ाइलों को शामिल नहीं कर सकता .. यह अफ़सोस की बात है ..
स्टीफन


2
आप इस तथ्य पर लड़ रहे हैं कि Arduino उपकरण वास्तविक, परिपक्व या पेशेवर सॉफ़्टवेयर प्रथाओं के साथ मौलिक रूप से असंगत हैं। वे शायद लगातार .git निर्देशिका के बारे में शिकायत करेंगे, हालांकि यह वास्तव में निर्माण को नहीं तोड़ेगा।
क्रिस स्ट्रैटन

जवाबों:


7

ठीक है, यहां बताया गया है कि यह कैसे काम करता है, और मैंने यह सुनिश्चित करने के लिए इसकी जांच की।

सुनिश्चित करें कि आप कठिन रास्तों का उपयोग कर सकते हैं, लेकिन हर प्रोग्रामर को कठिन रास्तों का उपयोग करने से नफरत है। वे बिल्कुल भी पोर्टेबल नहीं हैं, और वे आपके कार्यक्रम को जगह में बंद कर देते हैं। आप प्रोजेक्ट में फ़ाइलों के लिए सॉफ्ट या हार्ड लिंक का उपयोग करते हैं ("ln" पर मैन पेज देखें)। लेकिन, ... बदसूरत के बारे में बात करो! तो सवाल यह है कि इसे "सही ढंग से" कैसे किया जाए? कुंजी सीख रही है कि कौन से पैरामीटर और किस रास्ते में C / C ++ कंपाइलर चलता है।

आप पाएंगे कि निष्कर्ष बिल्कुल सहज नहीं है। पीछा करने के लिए काटना: रिश्तेदार रास्ते सही ढंग से काम नहीं करते हैं। अब क्यों?

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

1.6.13 तक (टेनेसी अभी तक 1.8। * का समर्थन नहीं करता है), रिश्तेदार में लाइब्रेरी से शुरुआत शामिल है , आपकी निर्देशिका नहीं। ऐसा प्रतीत होता है कि एओ-टू-सी फ़िल्टर (याद रखें कि Arduino लक्ष्य के लिए "रूपांतरण" करता है, फिर C / C ++ कंपाइलर को कॉल करता है) जहां आप अपने Arduino ट्री को स्थापित करते हैं, वहां शुरू होता है। मेरे मामले में, मैंने "~ / bin / arduino" में स्थापित किया। Teensy का घर "है ।/hardware/teensy"। पुस्तकालयों के लिए पूरा घर का रास्ता "~ / बिन / arduino / हार्डवेयर / किशोर / avr / पुस्तकालय" है जहां आपको सभी सहायता कार्यक्रम के पेड़ मिलेंगे।

स्रोत फ़ाइल में, "#include" test.hpp "'कथन आपके वर्तमान निर्देशिका से फ़ाइल को सही ढंग से चुनता है। फिर भी, यदि आप '#include "../test.hpp" का उपयोग करते हैं, तो शामिल पथ आपके प्रोजेक्ट निर्देशिका में प्रारंभ नहीं होता है। इसके बजाय यह "/ पुस्तकालय" में शुरू होता है! इसलिए परिणामी रास्ता है:

#include "../test.hpp" ==> ./arduino/hardware/teensy/avr/libraries/test.hpp

अंत में पास की निर्देशिका में अपने स्वयं के उपकरण बनाने का कोई साफ तरीका नहीं है। एकमात्र कोर्स अरुडिनो लाइब्रेरी में आपके काम करने के लिए है और उन नियमों के बारे में भी जानते हैं।


2

मैं अभी कुछ समय के बाद arduino का उपयोग करने के लिए वापस आ गया हूं और कुछ इसी तरह के मुद्दों से घबरा गया हूं और विभिन्न साइटों से अलग-अलग जानकारी और विचारधारा के विभिन्न संस्करणों द्वारा भ्रमित हूं।

मैंने पाया है कि यदि आपके पास एक निर्देशिका में एक स्केच है, तो Ide को बंद कर सकते हैं जिसे आप छोड़ सकते हैं।

फ़ाइल नाम, कोई पथ, कोई कोण कोष्ठक पर सरल उद्धरणों का उपयोग करके उन्हें शामिल करें।

मुझे यकीन है कि यह केवल पूर्ण उत्तर का हिस्सा है, लेकिन इसने मुझे शुरू कर दिया है।


2

जहाँ तक मुझे पता है, आप अपने पूर्ण पथ का उपयोग करके अपने पुस्तकालयों को एक कस्टम स्थान से शामिल कर सकते हैं।

चूंकि कोड-पोर्टेबिलिटी के दृष्टिकोण से निरपेक्ष पथ उबाऊ हो सकते हैं, आप किसी दिए गए रिश्तेदार से पूर्ण पथ प्राप्त करने के लिए कुछ मैक्रो को परिभाषित कर सकते हैं। इस तरह, आपको एक डिवाइस से दूसरे में जाने पर बस 'प्रोजेक्ट रूट' पथ को ठीक करना होगा।

अपनी परियोजना के मूल फ़ोल्डर को परिभाषित करें:

    #define PROJECT_ROOT C:\path\to\your\project\folder

एक रिश्तेदार-से-पूर्ण मैक्रो 'परिवर्तन' को परिभाषित करें:

    #define TO_STRING(s) #s
    #define ABSOLUTE_PATH(root, relative_path) TO_STRING(root\relative_path)
    #define RELATIVE_PATH(library) ABSOLUTE_PATH(PROJECT_ROOT, library)

रिश्तेदार पथ का उपयोग करके अपनी फ़ाइलें शामिल करें:

    #include RELATIVE_PATH(some\file\relative\path.h)
    #include RELATIVE_PATH(another\file\relative\path.h)

मुझे उम्मीद है कि यह उपयोगी होगा।



2

मैंने हाल ही में इस स्थानीय पुस्तकालय संरचना का परीक्षण किया। इसके साथ काम करता है:

#include "libs/MyNewLib/MyNewLib.h"

Arduino IDE 1.6.7 बिल्ड प्री-प्रोसेसिंग यहां तक ​​कि लाइब्रेरी के लिए स्रोत कोड भी ले जाएगा।

चीयर्स!


1
1.6.7 में नया होना चाहिए
जेम्स न्यूटन

ऐसा लगता है कि वास्तव में नए संस्करण अधिक लचीले हैं और आप पुस्तकालयों को सापेक्ष पथों में शामिल कर सकते हैं। हालाँकि मैं अभी भी समस्याओं में भाग गया जब शामिल फ़ाइलों में उनके स्थान के सापेक्ष अन्य फाइलें भी शामिल हैं ।
सेबेस्टियन 11

हम्म में वे समस्याएं शामिल हैं, जिनके बारे में मैंने लिखा था कि वे पथ से संबंधित नहीं हैं। ऐसा प्रतीत होता है कि Arduino IDE * .ipp फ़ाइलों को अच्छी तरह से हैंडल नहीं करता है। इस arduino फोरम थ्रेड को
सेबस्टियन 12

विंडोज पर 1.8.1 में मेरे लिए काम नहीं करता है।
वायलेट जिराफ़

1

इसका सबसे सरल तरीका यह है कि मैं आपके स्थानीय स्केच निर्देशिका में पुस्तकालयों को संग्रहीत कर रहा हूं और [HOME] / Arduino / पुस्तकालयों निर्देशिका में एक प्रतीकात्मक लिंक बनाता हूं। फिर आप उन्हें अपने स्केच / प्रोजेक्ट के साथ आसानी से Git में चेक कर सकते हैं और Arduino अभी भी खुश हैं क्योंकि लाइब्रेरी वैश्विक फ़ोल्डर में सुलभ हैं।

हो सकता है कि एक स्थापित स्क्रिप्ट भी बनाएं जो इन लिंक को स्वचालित रूप से बनाता है और जाँचता है कि Git में भी।


0

एक और वास्तव में बुरा तय - एक फाइल बनाई है libraries.cpp, जिसमें शामिल हैं:

// force the linker to build the libraries
#include "libraries/LIB1/src/FILE1.cpp"
#include "libraries/LIB1/src/FILE2.cpp"
#include "libraries/LIB2/src/FILE1.cpp"

बेशक, यह केवल तभी काम करता है जब पुस्तकालय में खुद को शामिल नहीं किया जाता है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.