Je suis nouveau dans le développement Arduino / C (provenant d'un environnement JavaScript / Ruby), mais je me demandais s'il était possible d'inclure une bibliothèque à partir d'un dossier personnalisé dans une esquisse?
Voilà donc ma situation;
project.ino
libs/
MyNewLib/
MyNewLib.h
MyNewLib.ccp
Maintenant ma question est: comment puis-je inclure ma bibliothèque personnalisée? J'ai essayé plusieurs variantes à ce sujet;
# project.ino
#include <libs/MyNewLib/MyNewLib.h>
#include "libs/MyNewLib/MyNewLib.h"
#include <./libs/MyNewLib/MyNewLib.h>
#include "./libs/MyNewLib/MyNewLib.h"
Mais aucun ne fonctionne. Quelqu'un peut-il me dire si cela est possible? J'ai étudié cette question sur le Web, mais je ne trouve aucune réponse satisfaisante. J'espère que vous pourrez nous aider.
À votre santé.
MISE À JOUR
Je sais que vous pouvez placer vos bibliothèques dans votre dossier de bibliothèques globales, mais je les veux dans mon dossier de projet local. Je veux les partager via git avec mon équipe.
la source
include
spécifiant le chemin / vers / bibliothèque / qui est ce que je suppose que vous demandez.Réponses:
D'accord, voici comment cela fonctionne, et je l'ai vérifié pour m'en assurer.
Bien sûr, vous pouvez utiliser des chemins d'accès durs, mais chaque programmeur déteste utiliser des chemins d'accès durs. Ils ne sont pas portables du tout et verrouillent votre programme en place. Vous utilisez des liens mous ou durs vers les fichiers du projet (recherchez les pages de manuel sur "ln"). Mais ... parle de laid! La question est donc de savoir comment le faire "correctement"? La clé est d'apprendre avec quels paramètres et dans quel chemin le compilateur C / C ++ s'exécute.
Vous constaterez que la conclusion n'est PAS du tout intuitive. Aller droit au but: les chemins relatifs ne fonctionnent pas correctement. Maintenant pourquoi?
Mais d'abord, permettez-moi d'expliquer pourquoi quelqu'un voudrait placer des fichiers programme en dehors du répertoire du projet. Les programmeurs aiment écrire des classes de programme, des structures, des méthodes, des fonctions, des macros, etc., une fois. Dès que le programmeur solidifie le fragment de programme, il / elle veut mettre les fichiers dans une arborescence commune et continuer. Par la suite, chaque programme pourrait utiliser cette bibliothèque privée. De plus, en ayant les fichiers dans un emplacement central, vous n'aurez pas plusieurs copies et versions de chacun. Une bibliothèque privée pour de nombreux programmes privés.
Depuis la version 1.6.13 (Teensy ne prend pas encore en charge la version 1.8. *), Relatif inclut le démarrage à partir de la bibliothèque , pas votre répertoire. Il semble que le filtre ano-to-C (rappelez-vous qu'Arduino effectue une "conversion" vers la cible puis appelle le compilateur C / C ++) commence là où vous avez installé votre arbre Arduino. Dans mon cas, j'ai installé dans "~ / bin / arduino". La maison de Teensy est "./hardware/teensy". Le chemin d'accès complet pour les bibliothèques est "~ / bin / arduino / hardware / teensy / avr / bibliothèques" où vous trouverez toutes les arborescences de programmes de support.
Dans un fichier source, l'instruction '#include "test.hpp"' sélectionne correctement le fichier dans votre répertoire actuel. TOUTEFOIS, si vous utilisez '#include "../test.hpp",' le chemin d'inclusion ne démarre pas dans le répertoire de votre projet. Au lieu de cela, il commence dans "./ bibliothèques"! Le chemin résultant est donc:
#include "../test.hpp" ==> ./arduino/hardware/teensy/avr/libraries/test.hpp
En conclusion, il n'existe aucun moyen propre de créer votre propre arborescence d'outils dans un répertoire proche. Le seul cours est de valider votre travail dans la bibliothèque Arduino et d'être également conscient de ces règles.
la source
Je suis juste revenu à utiliser l'arduino après un certain temps et je suis quelque peu déconcerté par des problèmes similaires et confus par différentes informations de différents sites et pour différentes versions de l'idé.
Ce que j'ai trouvé, c'est que si vous avez une esquisse dans un répertoire, puis fermez l'Ide, vous pouvez déposer des fichiers .h, .cpp ... dans le répertoire et l'ide, une fois redémarré, les ouvrira avec l'esquisse.
Incluez-les en utilisant des guillemets simples sur les noms de fichiers, pas de chemin, pas de crochets.
Je suis sûr que ce n'est qu'une partie de la réponse complète, mais cela m'a permis de commencer.
la source
Pour autant que je sache, vous pouvez inclure vos bibliothèques à partir d'un emplacement personnalisé en utilisant leur chemin absolu.
Étant donné que les chemins absolus peuvent être ennuyeux du point de vue de la portabilité du code, vous pouvez définir certaines macros pour obtenir le chemin absolu à partir d'un chemin relatif donné. De cette façon, il vous suffirait de corriger le chemin «racine du projet» lors du passage d'un périphérique à un autre.
Définissez le dossier racine de votre projet:
Définissez une «transformation» de macro relative à absolue:
Incluez vos fichiers en utilisant le chemin relatif:
J'espère que ce sera utile.
la source
Le plugin Arduino pour Visual Studio prend en charge les bibliothèques locales, vous pouvez trouver le plugin ici
la source
J'ai récemment testé cette structure de bibliothèque locale. Cela fonctionne avec:
Le pré-traitement de la construction Arduino IDE 1.6.7 récupérera même le code source de la bibliothèque.
À votre santé!
la source
La façon la plus simple que j'ai trouvée de le faire est de stocker les bibliothèques dans votre répertoire d'esquisse local et de créer un lien symbolique dans le répertoire [HOME] / Arduino / bibliothèques. Ensuite, vous pouvez les archiver dans Git facilement avec votre croquis / projet et Arduino est toujours content car les bibliothèques sont accessibles dans le dossier global.
Peut-être même créer un script d'installation qui crée automatiquement ces liens et archiver cela dans Git aussi.
la source
Une autre solution vraiment mauvaise - créez un fichier appelé
libraries.cpp
, qui contient:Bien sûr, cela ne fonctionne que si la bibliothèque ne contient pas elle-même d'includes ...
la source