Хорошо, вот как это работает, и я проверил это, чтобы убедиться.
Конечно, вы можете использовать сложные пути, но каждый программист ненавидит использовать сложные пути. Они вообще не переносимы и блокируют вашу программу на месте. Вы используете мягкие или жесткие ссылки на файлы в проекте (посмотрите справочные страницы на «ln»). Но, ... говорить о некрасивом! Так что вопрос в том, как это сделать «правильно»? Ключ в том, чтобы узнать, с какими параметрами и по какому пути работает компилятор C / C ++.
Вы обнаружите, что заключение НЕ является интуитивно понятным. Резка в погоне: относительные пути не работают правильно. Теперь почему?
Но сначала позвольте мне объяснить, почему кто-то захочет разместить программные файлы за пределами каталога проекта. Программистам нравится писать программные классы, структуры, методы, функции, макросы и т. Д. Один раз. Как только программист затвердевает фрагмент программы, он / она хочет поместить файлы в общее дерево и двигаться дальше. После этого каждая программа может использовать эту частную библиотеку. Кроме того, благодаря центральному расположению файлов у вас не будет нескольких копий и версий каждого. Одна частная библиотека для многих частных программ.
Начиная с версии 1.6.13 (Teensy еще не поддерживает 1.8. *), Относительная включает начало из библиотеки , а не из вашего каталога. Похоже, что фильтр ano-to-C (помните, что Arduino выполняет «преобразование» в цель, а затем вызывает компилятор C / C ++) запускается там, где вы установили дерево Arduino. В моем случае я установил в "~ / bin / arduino". Дом Тинси "./hardware/teensy". Полный домашний путь к библиотекам - «~ / bin / arduino / hardware / teensy / avr / library», где вы найдете все деревья программ поддержки.
В исходном файле оператор '#include "test.hpp" правильно выбирает файл из вашего текущего каталога. ОДНАКО, если вы используете '#include "../test.hpp", путь включения не начинается в каталоге вашего проекта. Вместо этого он начинается в "./libraries"! Таким образом, получающийся путь:
#include "../test.hpp" ==> ./arduino/hardware/teensy/avr/libraries/test.hpp
В заключение, нет никакого чистого способа сделать свое собственное дерево инструментов в соседнем каталоге. Единственный курс - это зафиксировать свою работу в библиотеке Arduino и знать эти правила.