¿Cómo gestionar las dependencias?

9

Quiero incluir una dependencia como Logging . En su página dice:

  • Descargar archivo zip
  • Coloque la carpeta de registro en "bibliotecas \".

No quiero creer (con una mentalidad de Maven) que esta es la forma en que gestionamos las dependencias en los proyectos de Arduino. Eso significa que todos los que revisen mi paquete tendrían que repetir esos pasos localmente (o incluyen "bibliotecas \" en el control de versiones) ¿Cuál es la mejor práctica para la gestión de dependencias?

Markus Malkusch
fuente
No, eso es lo que todos hacen.
Code Gorilla
Bibliotecas es lo que son las bibliotecas. Este no es Maven. Este es Arduino. Es simplista para que las personas sin conocimiento de microcontroladores puedan hacer que un LED parpadee. Si desea instalaciones IDE reales, use un IDE real.
Majenko
1
Bueno, estoy usando el primer hit en Google para Arduino IDE, pero esto no me ayuda con las dependencias. Hacer parpadear un LED no necesariamente requiere una biblioteca y estoy de acuerdo en que las cosas deberían ser simples. Esa es la razón por la que pido la gestión de dependencias.
Markus Malkusch
Busque C ++ IDE o G ++ IDE en su lugar. Y paracrosscompiling
gilhad

Respuestas:

6

Arduino está destinado a ser una forma fácil para personas no técnicas y, por lo tanto, oculta todo lo que puede a simple vista para ser simple.

Para un proyecto simple, funciona a costa de la sobrecarga de copiar bibliotecas aquí y allá y usar el "IDE" de Arduino. Llamando a los programas "bocetos" y manipulándolo para ocultar, que está en C ++. Y así sucesivamente y así sucesivamente.

Si desea realizar proyectos más complicados, control de versiones, buen entorno y demás, debe abandonar "simplemente Arduino" y comenzar a utilizar herramientas más potentes y complicadas.

Yo personalmente uso https://github.com/sudar/Arduino-Makefile https://github.com/ladislas/Bare-Arduino-Project y lo tengo en los repositorios de GIT.

De esta manera puedo compartir bibliotecas entre proyectos en grupo, también enlaces a bibliotecas fuera del árbol, así como submódulos gits, lo que le permite tener bibliotecas actualizadas de terceros disponibles para todos los proyectos, también aquellos antiguos.

Todavía uso mucho Arduino (como setup / loop, digitalRead y demás), pero también uso construcciones "normales" de g ++ en el camino. Más tarde, divergiré aún más para codificar código C / g ++ / .. probablemente, usando algunos RTOS más o menos, pero ahora mis necesidades aún no están tan lejos. (google "arduino rtos" Actualmente estoy leyendo https://github.com/greiman/NilRTOS-Arduino )

Arduino no pretende ser la "mejor práctica" de todos modos. Está destinado a ser "una forma rápida y fácil de hacer algo, cuando no sabes nada". Y funciona, ya que cualquiera y su perro pueden comenzar con Arduino y, si está interesado, puede llegar más lejos por su cuenta, o puede seguir con lo fácil y divertirse de todos modos.

gilhad
fuente
1

Si desea que el proyecto sea autónomo, puede colocar las dependencias de la biblioteca en la carpeta de croquis. Entonces, la estructura de carpetas del boceto de Foo con la dependencia de la biblioteca Logging se vería así:

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

Y en Foo.ino incluirás la biblioteca así:

#include "src/Logging/Logging.h"

Desafortunadamente, algunas bibliotecas usan la sintaxis de inclusión incorrecta que todavía funciona cuando la biblioteca está instalada en una de las carpetas de las bibliotecas, pero no cuando se encuentra en la carpeta de croquis. La biblioteca de registro utiliza la sintaxis de inclusión correcta, pero a veces para colocar las bibliotecas en la carpeta de bocetos, deberá corregir esto. Por ejemplo, supongamos que tiene una biblioteca llamada Bar y en Bar.cpp verá esto:

#include <Bar.h>

Eso no funcionará porque si está instalado en la carpeta de croquis Bar.h no se ubicará en una de las rutas de inclusión estándar, por lo que debe editar Bar.cpp y cambiar la sintaxis de inclusión a:

#include "Bar.h"

Lo que hará que se busque en la carpeta local el archivo incluido.

La desventaja de este sistema es que puede terminar con varias copias de una biblioteca, por lo que es más trabajo actualizar o modificar cada copia. Por supuesto, eso también puede ser un beneficio porque cada proyecto puede tener su propia versión de la biblioteca que funciona y que no se verá afectada por las actualizaciones que pueda hacer a la misma biblioteca utilizada en otros proyectos.

En general, solo agrego instrucciones sobre cómo instalar las dependencias de la biblioteca de la manera habitual a la documentación de un proyecto. Eso debería estar dentro de las capacidades del usuario promedio de Arduino. Si es necesaria una versión específica de una biblioteca, entonces documente eso. Sin embargo, hay casos en los que he querido entregar un proyecto autónomo a alguien que no está familiarizado con el uso de Arduino IDE y es cuando utilicé el sistema descrito anteriormente para todas las bibliotecas de terceros necesarias.

por1234
fuente