Yerel kütüphaneleri yükleme


14

(JavaScript / Ruby ortamından geliyor) Arduino / C geliştirme konusunda yeniyim, ancak bir kroki içindeki özel bir klasörden bir kitaplık eklemenin mümkün olup olmadığını merak ediyordum?

Bu benim durumum;

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

Şimdi sorum şu: Özel kütüphanemi nasıl ekleyebilirim? Bu konuda birkaç varyasyon denedim;

# project.ino

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

Ama hiçbiri çalışmıyor. Biri bana bunun mümkün olup olmadığını söyleyebilir mi? Web'de bu soruyu inceledim, ancak tatmin edici bir cevap bulamıyorum. Umarım siz yardımcı olabilirsiniz.

Şerefe.

GÜNCELLEME

Kütüphanelerinizi global kütüphaneler klasörünüze koyabileceğinizin farkındayım, ancak onları yerel proje klasörümde istiyorum. Onları git aracılığıyla ekibimle paylaşmak istiyorum.


4
Lütfen sorumu tekrar oku @Tyson. Global kütüphaneler çözümünün farkındayım, ama bunları projemde istiyorum.
Stefan

Önce IDE'ye kütüphaneyi nerede bulacağını (önceki bağlantıya bakın) söylemelisiniz, daha sonra çiziminizde kütüphaneyi çağırmalısınız. "#include <LibraryName.h>` AFAIK, ikisini include/ kütüphane / yolunu belirten tek bir dosyada birleştiremezsiniz .
Tyson

1
Tamam, bu yüzden alt klasörlerden dosya ekleyemiyorum .. Bu üzücü ..
Stefan


2
Arduino araçlarının gerçek, olgun veya profesyonel yazılım uygulamalarıyla temelde uyumsuz olduğu gerçeğini tökezlersiniz. Ayrıca, yapıyı bozmayacak olsa da, muhtemelen bu .git dizini hakkında sürekli olarak şikayet edecekler.
Chris Stratton

Yanıtlar:


7

Tamam, işte böyle çalışıyor ve emin olmak için kontrol ettim.

Elbette zor yollar kullanabilirsiniz, ancak her programcı sabit yollar kullanmaktan nefret eder . Hiç taşınabilir değiller ve programınızı yerinde kilitliyorlar. Projedeki dosyalara yumuşak veya sabit bağlantılar kullanırsınız ("ln" deki man sayfalarına bakın). Ama, ... çirkin hakkında konuşun! Yani soru "doğru" nasıl yapılır? Anahtar, hangi parametrelerle ve C / C ++ derleyicisinin hangi yolda çalıştığını öğrenmektir.

Sonuç hiç sezgisel DEĞİL bulacaksınız. Chase kesim: göreli yollar yok düzgün çalışması. Şimdi, neden?

Ama önce, neden herkesin program dosyalarını proje dizininin dışına yerleştirmek istediğini açıklayayım . Programcılar bir kez program sınıfları, yapılar, yöntemler, fonksiyonlar, makrolar vb. Programcı program parçasını sağlamlaştırdığı anda, dosyaları ortak bir ağaca koymak ve devam etmek ister. Bundan sonraki her program bu özel kütüphaneyi kullanabilir. Ayrıca, dosyaları merkezi bir yerde tutarak, her birinin birden fazla kopyasına ve sürümüne sahip olmayacaksınız. Birçok özel program için tek bir özel kütüphane.

1.6.13'ten itibaren (Teensy henüz 1.8. * 'İ desteklememektedir), göreli dizininizi değil kütüphaneden başlamayı içerir . Ano-C filtresinin (Arduino'nun hedefe "dönüşüm" yaptığını ve ardından C / C ++ derleyicisini çağırdığını unutmayın) Arduino ağacınızı kurduğunuz yerden başlar. Benim durumumda, "~ / bin / arduino" içine kurdum. Teensy'nin evi "./hardware/teensy" dir. Kütüphaneler için tüm ana yol "~ / bin / arduino / donanım / teensy / avr / kütüphaneler" dir ve burada tüm destek programı ağaçlarını bulacaksınız.

Bir kaynak dosyada '#include "test.hpp"' ifadesi dosyayı geçerli dizininizden doğru bir şekilde seçer. Kullanmak eğer ANCAK '#include '../test.hpp',' yok yolu dahil değil proje dizininde başlar. Bunun yerine "./labraries" ile başlıyor! Sonuçta ortaya çıkan yol:

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

Sonuç olarak, yakındaki bir dizinde kendi araç ağacınızı oluşturmanın temiz bir yolu yoktur. Tek ders, Arduino kütüphanesinde çalışmanızı sağlamak ve bu kuralların da farkında olmaktır.


2

Ben sadece bir süre sonra arduino kullanmaya geri döndüm ve biraz benzer konular tarafından şaşkın ve farklı sitelerden ve ide farklı sürümleri için farklı bilgi ile karıştırılır.

Bulduğum şey, bir dizinde bir çiziminiz varsa, daha sonra Ide'yi kapatın, dizine .h, .cpp ... dosyalarını bırakabilirsiniz ve yeniden başlatıldığında ide, bunları kroki ile açacaktır.

Dosya adlarındaki basit tırnak işaretlerini kullanarak bunları ekleyin, yol yok, köşeli parantez yok.

Bunun tam cevabın sadece bir parçası olduğuna eminim, ama beni başlattı.


2

Bildiğim kadarıyla, mutlak yollarını kullanarak kitaplıklarınızı özel bir konumdan ekleyebilirsiniz.

Mutlak yollar, kod taşınabilirliği açısından sıkıcı olabileceğinden, belirli bir göreli yoldan mutlak yolu elde etmek için bazı makrolar tanımlayabilirsiniz. Bu şekilde, bir cihazdan diğerine geçerken 'proje kökü' yolunu düzeltmeniz gerekir.

Projenizin kök klasörünü tanımlayın:

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

Göreli-mutlak makro 'dönüşümü' tanımlayın:

    #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)

Göreli yolu kullanarak dosyalarınızı ekleyin:

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

Umarım faydalı olacaktır.



2

Yakın zamanda bu yerel kütüphane yapısını test ettim. Şunlarla çalışır:

#include "libs/MyNewLib/MyNewLib.h"

Arduino IDE 1.6.7 derleme ön işlemesi, kütüphane için kaynak kodunu bile alacaktır.

Şerefe!


1
1.6.7'de yeni olmalı
James Newton

Görünüşe göre, daha yeni sürümler daha esnektir ve göreli yollara kütüphaneler ekleyebilirsiniz. Dahil dosyaları da göreli diğer dosyaları dahil Ancak ben hala sorunlarla karşılaştı onların konumu.
Sebastian

Hmm az önce yazdığım içerme problemleri yollarla ilgili değil. Arduino IDE'nin * .ipp dosyalarını iyi işlemediği anlaşılıyor. Bu arduino forum iş parçacığına
Sebastian

Windows'ta 1.8.1'de benim için çalışmıyor.
Violet Zürafa

1

Bunu yapmanın en basit yolu kütüphaneleri yerel taslak dizininizde saklamak ve [HOME] / Arduino / libraries dizininde sembolik bir bağlantı oluşturmaktır. Daha sonra taslak / projeniz ve Arduino'nun hala mutlu olması sayesinde bunları Git'e kolayca kontrol edebilirsiniz, çünkü kütüphanelere global klasörden erişilebilir.

Hatta bu bağlantıları otomatik olarak oluşturan bir yükleme betiği bile oluşturabilir ve Git'i de kontrol edebilirsiniz.


0

Başka bir gerçekten kötü düzeltme - libraries.cppaşağıdakileri içeren bir dosya oluşturun :

// 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"

Tabii ki, bu sadece kütüphane herhangi bir içerir içermiyorsa çalışır ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.