Включить местную библиотеку - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь скопировать пару библиотек, которые я создал, в свою локальную папку с эскизами, как указано в Обучающее руководство по библиотеке Arduino

Моя структура папок следующая

Documents\Arduino\MySketch\
  MySketch.ino
  libraries\
    Timer\
      Timer.h
      Timer.cpp

Я получаю следующую ошибку

fatal error: Timer.h: No such file or directory
#include <Timer.h>

Обратите внимание, что это прекрасно работает, если я переместил мои библиотеки в папку C: \ Program Files (x86) \ Arduino \ library , но я действительно не хочу, чтобы они были удалены из моего источника так как я не могу проверить их в своем git-хранилище.

Я думаю, что точно следую инструкциям, приведенным в руководстве. Я просто погуглил по этому поводу и обнаружил несколько похожих проблем, но не нашел решения. Предполагается, что он будет работать в последних версиях IDE (я на 1.8.5 на Windows 10).

Я также пытался включить библиотеки, используя двойные кавычки вместо угловых скобок, но получил ту же ошибку.

Не могли бы вы дать мне знать, как решить эту проблему?

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Мне кажется, что решение выглядит хорошо, если библиотеки / Таймер используются только этим эскизом .Что если у вас есть несколько проектов {git_repo} / sketch_ {n} / sketch_ {n} .ino, вызывающих один и тот же класс Timer (.h, .cpp)?

Если вы хотите избежать дублирования кода (и выделать), тогда вы можете поместить их в {git_repo} / library /.Вы все еще сможете проверить их в git.Однако это болезненно, потому что требует, чтобы каждый раз, когда вы изменяете один файл в библиотеке, вам необходимо:

  • удалить каталог C: \ Program Files (x86) \ Arduino \ library \ Timer
  • перезагрузите ".zip" (из {git_repo} / library / Timer) из Arduino IDE

Очень больно.

То, что вы можете сделать, это Создайте символическую ссылку из {git_repo} / library / your_library в C: \ Program Files (x86) \ Arduino \ library \ your_library

В Ubuntu это будет:

cd ~/Arduino/libraries/ # where Arduino stores the libs
rm -rf Timer/ # deleting your library if exists    
ln -s ~/dev/code/[MY_PROJECT]/libraries/Utils/Timer Timer

Arduino IDE узнает, что ваша библиотека существует, и автоматически перекомпилирует ее, если Timer. {H, cpp} (из вашего git_repo) был изменен между ними.

0 голосов
/ 11 сентября 2018

В последних версиях Arduino IDE выполняется рекурсивная компиляция подпапки src папки эскиза. Поэтому для достижения вашей цели вам понадобится структура папок, которая выглядит примерно так:

MySketch
|_MySketch.ino
|_src
   |_Timer
      |_Timer.h
      |_Timer.cpp

Тогда директива #include на эскизе должна выглядеть следующим образом:

#include "src/Timer/Timer.h"

Довольно часто библиотеки Arduino используют неверный синтаксис для своих внутренних директив #include. Например, Timer.cpp может содержать следующую строку:

#include <Timer.h>

Это не вызывает проблем при нормальной установке библиотеки, но вызывает ошибку при попытке использовать библиотеку, связанную с эскизом. Решение состоит в том, чтобы отредактировать библиотеку, чтобы использовать правильный синтаксис:

#include "Timer.h"
...