包括当地图书馆

Include local library

我正尝试按照 Arduino Library Tutorial

中的说明将我创建的几个库复制到我的本地草图文件夹

我的文件夹结构如下

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\libraries 文件夹,这会很好用,但我真的不想让它们远离我的来源,因为我无法将它们检查到我的 git 存储库。

我认为我完全按照教程中给出的说明进行操作。我只是用谷歌搜索这个并发现了几个类似的问题,但没有解决方案。它应该在 IDE 的最新版本中工作(我在 Windows 10 上使用 1.8.5)。

我也尝试使用双引号而不是尖括号来包含库,但我遇到了同样的错误。

你能告诉我如何解决这个问题吗?

谢谢

最新版本的 Arduino IDE 对 sketch 文件夹的 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"

在我看来,如果 libraries/Timer 仅由此草图 使用,则解决方案看起来不错。如果您有多个项目 {git_repo}/sketch_{n}/sketch_{n}.ino 调用相同的 class Timer(.h, .cpp) 怎么办?

如果你想避免代码重复(你这样做了),那么你可以将它们放入 {git_repo}/libraries/。您仍然可以将它们检出到 git。然而,这很痛苦,因为它需要每次修改一个文件到库中,你需要:

  • 删除目录 C:\Program Files (x86)\Arduino\libraries\Timer
  • 从 Arduino IDE
  • 重新加载“.zip”(来自 {git_repo}/libraries/Timer)

非常痛苦。

你可以做的是 创建一个符号 link 从 {git_repo}/libraries/your_library 到 C:\Program Files (x86) \Arduino\libraries\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)在此期间被修改,则会自动重新编译它。