Почему файл `.ino` должен находиться в папке с таким же именем?

12

Я пытаюсь организовать очень сложный проект, и я хочу поместить весь фактический код в папку с именем src(source), но я хочу сохранить основной .inoфайл как main.ino(он также будет в src). Затем, когда я пытаюсь открыть код, IDE говорит, что main.inoдолжен находиться в папке с именем main.

Почему это?

Я полностью понимаю сообщение об ошибке, но почему имя файла в Arduino должно быть так. Есть ли способ изменить это?

Дат Ха
источник

Ответы:

6

AFAIK, это особенность, встроенная в Arduino IDE. Лучший обходной путь, который я могу придумать, - это структура файла, например:

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

где myproj.cpp просто #includemain.cpp. Это должно оставить ваши файлы проекта «чистыми», чтобы они работали и в более типичной среде.

Обновить:

Я заимствовал имя «main» из вашего вопроса, но, если подумать, «main» - это зарезервированное имя, в частности, каждая программа на C или C ++ имеет main.c или main.cpp в качестве кода верхнего уровня, предоставляемого системой, если Вы не предоставляете один. Поэтому я избегал использовать его в качестве имени папки и проекта (но не стесняйтесь попробовать) и обновил диаграмму. Что вам нужно, так это папка проекта и файл .ino внутри нее с тем же именем. Файл .ino может

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

Например, ваш файл кода верхнего уровня, тянущий все остальное. Возможно, вам понадобится ваш .ino для #includeкаждого из файлов в srcпапке, если компилятор сам не определится, это то, где находятся ваши другие файлы.

Кстати, если вы используете имя main.cpp для вашего верхнего файла, ему придется вызывать функции setup () и loop () (и функцию последовательного события, если вы используете это). Вероятно, лучше оставить имя main главным, позвольте системе предоставить ту же самую главную, которую каждая программа Arduino получает по умолчанию, и написать свой код проекта типичным способом Arduino - начиная с setup () и loop ().

JRobert
источник
myproj.cppты имеешь в виду myproj.ino? Потому что я не вижу, где myproj.cppэто!
Дата Ха
Хорошо, небольшая проблема, если я сделаю это, некоторые базовые функции Arduino (такие как map () и analogRead ()), которые содержатся в sensor.cpp, не будут распознаваться компилятором.
Дат Ха
В качестве альтернативы, если вы работаете с Windows, используйте команду junction и «свяжите» каталог с правильным именем с каталогом с лучшим именем. Или, если вы работаете с Linux, используйте команду символическую ссылку, чтобы сделать то же самое.
st2000
(См. Мое обновление - ваш файл .ino может включать в себя все остальные файлы).
JRobert
3

Если у вас есть проект, состоящий из нескольких .INOфайлов, как IDE должна знать, какой из них является «основным»? Во время компиляции IDE объединяет все .INOфайлы в один монолитный файл. Он делает это, начиная с «основного», а затем добавляет в конец все остальные по алфавиту.

Это делается таким образом, чтобы ваши включаемые и глобальные переменные, которые вы должны поместить в «основной» .INOфайл, были в начале готовой программы.

Для этого IDE должна знать, какой из файлов является «основным». И способ, которым это получается, - найти тот, который назван так же, как папка, в которой находится эскиз.

В UECIDE я делаю еще один шаг и превращаю всю папку в составной документ, чтобы вам больше не нужно было вводить папку и открывать .INOфайл, чтобы открыть эскиз - сама папка является целым проектом эскиза. Опять же, папка такого типа идентифицируется как имеющая в ней .INOфайл с именем, совпадающим с папкой.

Маженко
источник