包括当地图书馆
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)在此期间被修改,则会自动重新编译它。
我正尝试按照 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)在此期间被修改,则会自动重新编译它。