AFAIK, это особенность, встроенная в Arduino IDE. Лучший обходной путь, который я могу придумать, - это структура файла, например:
ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
+ myproj.ino + sensor.h
+ sensor.cpp
+ (more files)
где myproj.cpp просто #include
main.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 ().
myproj.cpp
ты имеешь в видуmyproj.ino
? Потому что я не вижу, гдеmyproj.cpp
это!Если у вас есть проект, состоящий из нескольких
.INO
файлов, как IDE должна знать, какой из них является «основным»? Во время компиляции IDE объединяет все.INO
файлы в один монолитный файл. Он делает это, начиная с «основного», а затем добавляет в конец все остальные по алфавиту.Это делается таким образом, чтобы ваши включаемые и глобальные переменные, которые вы должны поместить в «основной»
.INO
файл, были в начале готовой программы.Для этого IDE должна знать, какой из файлов является «основным». И способ, которым это получается, - найти тот, который назван так же, как папка, в которой находится эскиз.
В UECIDE я делаю еще один шаг и превращаю всю папку в составной документ, чтобы вам больше не нужно было вводить папку и открывать
.INO
файл, чтобы открыть эскиз - сама папка является целым проектом эскиза. Опять же, папка такого типа идентифицируется как имеющая в ней.INO
файл с именем, совпадающим с папкой.источник