Comment gérer les dépendances?


9

Je veux inclure une dépendance comme la journalisation . Sur sa page, il est écrit:

  • Télécharger le fichier zip
  • Placez le dossier Logging dans "bibliothèques \".

Je ne veux pas croire (avec un état d'esprit Maven) que c'est la façon dont nous gérons les dépendances dans les projets Arduino. Cela signifie que tout le monde qui extrait mon package devra répéter ces étapes localement (ou incluez-vous "bibliothèques \" dans le contrôle de version) Quelle est la meilleure pratique pour la gestion des dépendances?


Non, c'est ce que tout le monde fait.
Code Gorilla

Les bibliothèques sont ce que sont les bibliothèques. Ce n'est pas Maven. C'est Arduino. C'est simpliste pour que les personnes sans connaissance des microcontrôleurs puissent faire clignoter une LED. Si vous voulez de vraies fonctionnalités IDE, utilisez un véritable IDE.
Majenko

1
Eh bien, j'utilise le premier hit de Google pour Arduino IDE, mais cela ne m'aide pas avec les dépendances. Faire un clignotement LED ne nécessite pas nécessairement une bibliothèque et je conviens que les choses devraient être simples. C'est la raison même pour laquelle je demande la gestion des dépendances.
Markus Malkusch

Recherchez plutôt l'IDE C ++ ou l'IDE G ++. Et pourcrosscompiling
gilhad

Réponses:


6

Arduino est censé être un moyen facile pour les personnes non techniques et il cache donc autant que possible de manière simple pour être simple.

Pour un projet simple, cela fonctionne au prix d'un surcoût de copie de bibliothèques ici et là et d'utilisation de "l'IDE" d'Arduino. Appeler des programmes "croquis" et les manipuler pour les cacher, c'est en C ++. Ainsi de suite.

Si vous voulez faire des projets plus compliqués, un contrôle de version, un bon environnement et autres, vous devez quitter "simplement la voie Arduino" et commencer à utiliser des outils plus puissants et compliqués.

J'utilise personnellement https://github.com/sudar/Arduino-Makefile https://github.com/ladislas/Bare-Arduino-Project et je l'ai dans les référentiels GIT.

De cette façon, je peux partager des bibliothèques entre des projets en groupe, également des liens vers des bibliothèques en dehors de l'arborescence, ainsi que des sous-modules gits, vous permettant d'avoir des bibliothèques mises à jour de tierces parties disponibles pour tous les projets, même les anciens.

J'utilise toujours beaucoup d'Arduino (comme setup / loop, digitalRead et autres), mais j'utilise aussi des constructions g ++ "normales" en cours de route. Plus tard, je divergerai encore plus vers du code C / g ++ / .. simple, en utilisant un peu de RTOS, mais maintenant mes besoins ne sont pas encore si loin. (google "arduino rtos" Je lis actuellement https://github.com/greiman/NilRTOS-Arduino )

L'Arduino n'est pas censé être une "meilleure pratique" de toute façon. C'est censé être "un moyen rapide et facile de faire quelque chose, quand on ne sait rien". Et cela fonctionne, car tout le monde et son chien peuvent commencer avec Arduino et s'ils sont intéressés, il peut aller plus loin par lui-même, ou il peut rester simple et s'amuser de toute façon.


1

Si vous souhaitez que le projet soit autonome, vous pouvez placer les dépendances de bibliothèque dans le dossier d'esquisse. Ainsi, la structure de dossiers de l'esquisse Foo avec la dépendance de la bibliothèque de journalisation ressemblerait à ceci:

Foo
|_Foo.ino
|_src
  |_Logging
    |_Logging.h
    |_Logging.cpp

Et dans Foo.ino, vous inclurez la bibliothèque comme ceci:

#include "src/Logging/Logging.h"

Malheureusement, certaines bibliothèques utilisent la syntaxe include incorrecte qui fonctionne toujours lorsque la bibliothèque est installée dans l'un des dossiers de bibliothèques mais pas lorsqu'elle se trouve dans le dossier d'esquisse. La bibliothèque de journalisation utilise la syntaxe d'inclusion correcte, mais parfois pour placer les bibliothèques dans le dossier d'esquisse, vous devrez résoudre ce problème. Par exemple, supposons que vous ayez une bibliothèque nommée Bar et dans Bar.cpp vous voyez ceci:

#include <Bar.h>

Cela ne fonctionnera pas car s'il est installé dans le dossier d'esquisse, Bar.h ne se trouvera pas dans l'un des chemins d'inclusion standard, vous devez donc modifier Bar.cpp et modifier la syntaxe d'inclusion en:

#include "Bar.h"

Ce qui entraînera la recherche dans le dossier local du fichier inclus.

L'inconvénient de ce système est que vous pouvez vous retrouver avec plusieurs copies d'une bibliothèque, il est donc plus difficile de mettre à jour ou de modifier chaque copie. Bien sûr, cela peut également être un avantage car chaque projet peut avoir sa propre version connue de la bibliothèque qui ne sera pas affectée par les mises à jour que vous pourriez apporter à la même bibliothèque utilisée dans d'autres projets.

J'ajoute généralement des instructions sur la façon d'installer les dépendances de bibliothèque de la manière habituelle dans la documentation d'un projet. Cela devrait être dans les capacités de l'utilisateur Arduino moyen. Si une version spécifique d'une bibliothèque est nécessaire, vous documentez cela. Cependant, il y a des cas où j'ai voulu remettre un projet autonome à quelqu'un qui n'est pas familier avec l'utilisation de l'IDE Arduino et c'est alors que j'ai utilisé le système décrit ci-dessus pour toutes les bibliothèques tierces nécessaires.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.