包括本地图书馆

时间:2018-09-10 22:03:12

标签: arduino arduino-ide

我正在按照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)。

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

能否让我知道如何解决此问题?

谢谢

2 个答案:

答案 0 :(得分:0)

最新版本的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"

答案 1 :(得分:0)

在我看来,如果仅此草图使用库/计时器,则解决方案看起来不错。如果您有多个项目{git_repo} / sketch_ {n} / sketch_ {n} .ino调用同一类Timer(.h,.cpp),该怎么办?

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

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

非常痛苦。

您可以做的是从{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

如果在之间修改了Timer。{h,cpp}(来自git_repo),则Arduino IDE将知道您的库存在,并会自动重新编译它。