Pourquoi un fichier `.ino` doit-il se trouver dans un dossier du même nom?

12

J'essaie d'organiser un projet très compliqué et je veux mettre tout le code réel dans un dossier nommé src(source), mais je veux garder le .inofichier principal sous main.ino(il sera également dans src). Ensuite, lorsque j'essaie d'ouvrir le code, l'IDE dit que cela main.inodoit être dans un dossier nommé main.

Pourquoi est-ce?

Je comprends parfaitement le message d'erreur, mais pourquoi la dénomination des fichiers dans Arduino doit-elle l'être? Y a-t-il un moyen de changer cela?

Dat Ha
la source

Réponses:

6

AFAIK, c'est une bizarrerie intégrée à l'IDE Arduino. La meilleure solution de contournement à laquelle je peux penser est une structure de fichiers comme:

ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
                                  + myproj.ino    + sensor.h
                                                  + sensor.cpp
                                                  + (more files)

, où myproj.cpp est simplement #includemain.cpp. Cela devrait laisser vos fichiers de projet "propres" afin qu'ils fonctionnent également dans un environnement plus typique.

Mise à jour:

J'ai emprunté le nom "main" à votre question, mais à la réflexion, "main" est un nom réservé, spécifiquement, chaque programme C ou C ++ a un code main.c ou main.cpp comme code de niveau supérieur, fourni par le système si vous n'en fournissez pas. J'ai donc évité de l'utiliser comme nom de dossier et de projet (mais n'hésitez pas à l'essayer) et j'ai mis à jour le diagramme. Vous avez besoin d'un dossier de projet et d'un fichier .ino du même nom. Le fichier .ino pourrait

#include <src/anything-else-you-like>

, par exemple, votre fichier de code de niveau supérieur, tirant ainsi tout le reste. Vous devrez peut-être pour votre .ino à #includechacun des fichiers dans le srcdossier, si le compilateur ne comprend pas par lui-même, c'est là que se trouvent vos autres fichiers.

BTW, si vous utilisez le nom main.cpp pour votre fichier supérieur, il devra appeler les fonctions setup () et loop () (et la fonction d'événement série, si vous l'utilisez). Il est probablement préférable de laisser le nom `` principal '' seul, de laisser le système fournir le même principal que chaque programme Arduino obtient par défaut, et d'écrire votre code de projet de la manière typique d'Arduino - en commençant par setup () et loop ().

JRobert
la source
myproj.cpptu veux dire myproj.ino? Parce que je ne vois pas où myproj.cppest!
Dat Ha
Ok, petit problème, si je fais cela, certaines fonctions de base Arduino (telles que map () et analogRead ()) contenues dans sensor.cpp ne seront pas reconnues par le compilateur.
Dat Ha
Alternativement, si vous travaillez sur une boîte Windows, utilisez la commande de jonction et "liez" un répertoire correctement nommé au répertoire avec le meilleur nom. Ou, si vous travaillez sur une boîte Linux, utilisez la commande de lien symbolique pour faire de même.
st2000
(Voir ma mise à jour - votre fichier .ino devra peut-être inclure chacun des autres fichiers).
JRobert
3

Lorsque vous avez un projet composé d'un certain nombre de .INOfichiers, comment l'IDE est-il censé savoir lequel est le "principal"? Pendant la compilation, l'EDI concatène tous les .INOfichiers ensemble en un seul fichier monolithique. Il fait cela en commençant par le "principal" et ajoute ensuite chacun des autres par ordre alphabétique à la fin.

Cela se fait de cette façon afin que vos inclusions et variables globales, que vous devez mettre dans votre .INOfichier "principal" , soient au début du programme terminé.

Pour ce faire, l'IDE doit savoir lequel des fichiers est le "principal". Et la façon dont cela fonctionne est de trouver celui qui porte le même nom que le dossier dans lequel se trouve l'esquisse.

Dans UECIDE, je vais plus loin et je transforme tout le dossier en un document composé pour que vous n'ayez plus à entrer dans un dossier et à ouvrir un .INOfichier pour ouvrir une esquisse - le dossier lui-même est le projet d'esquisse dans son intégralité. Encore une fois, ce type de dossier est identifié comme .INOcontenant un fichier qui porte le même nom que le dossier.

Majenko
la source