将所有库保存在Arduino草图目录中
我知道你应该把任何外部库放在arduino安装目录的“libraries”文件夹下,但是我有一个项目使用了我为这个项目创build的几个库,主要是保持所有的代码自包含主要的pde文件。 然而,我试图把库放在与主PDE文件相同的目录中,这样我就可以更容易地把所有的东西都同步到颠覆(我在多台计算机上工作),我不想继续返回并分别同步库。 另外,只是为了能够轻松地压缩草图文件夹,并知道它包含所需的一切。
我已经尝试将头文件添加到草图作为一个新的选项卡,但这似乎并不工作…甚至不关心,如果他们应该在Arduino IDE。
我也尝试添加库到子目录中的草图目录(我非常喜欢),然后链接到它们:
#include "mylib/mylib.h"
和
#include <mylib/mylib.h>
但是这两个都导致文件没有find错误。
这可能吗? 而且,如果是这样的话,我如何将它们包含在主要的build筑文件中呢? 最好在他们自己的子目录中。
对于我的草图, "*.h"
和"*.cpp"
库文件实际上与草图位于同一个文件夹中,我将它们称为"someheader.h"
。 我还注意到,如果我进入sketch
菜单并add file...
该文件不会出现,直到我closures并重新打开草图。
我赞同你; 这是开发软件的一种无法容忍的方式:它需要每个文件与主程序位于同一个目录中!
为了解决这个问题,我使用make
将.h
和.cpp
源文件中的一个.h
文件放在一起 – 你可以在Makefile中看到这个文件 :
PREPROCESS=gcc -E -C -xc -iquote ./src # -E : Stop after preprocessing. # -C : Don't discard comments. # -xc : Treat the file as C code. # -iquote ./src : Use ./src for the non-system include path. TARGETS=sketches/morse/morse.h all: $(TARGETS) clean: rm $(TARGETS) %.h: %.h.in $(PREPROCESS) $< -o $@
Arduino对文件结尾是非常挑剔的 – 如果你把一个.cpp
或.cc
文件放在它的目录中,它会自动在源文件中使用它,你不能包含任何不是.cpp
, .cc
或.h
-是要做到这一点的唯一方法。
我也使用类似的技巧来把JavaScript文件放在这里 。
这需要你在编辑你的文件后运行make
,但是由于我使用的是外部编辑器(Emacs),所以这对我来说是零麻烦的。
我遇到过同样的问题。 解决了它的Arduino IDE> 1.8。 根据参考文献(见下面的链接),在新的IDE(?)中看起来很专业。
在创build库文件夹之前,您必须添加一个“src”子目录。 所以基本上你的项目应该是这样的:
/SketchDir (with *.ino file) /SketchDir/src /SketchDir/src/yourLib (with .h and .cpp file)
最后在你的素描中引用:
#include "src/yourLib/yourLib.h"
否则在我的情况下 – 如果我错过了“src”文件夹 – 我得到错误消息,它无法findyourLib.cpp文件。
注:我使用的是Windows系统,如果它不同,实际上VS Code就是Arduino IDE的封装。 但是IDE都用这个结构编译它。
参考资料: https : //forum.arduino.cc/index.php?topic=445230.0
我只是有同样的问题(我也喜欢保持代码自包含),所以我只是记下一些笔记; 说我有MyPdeSketch.pde
使用MyLibClass.cpp
; 那么我有这样的组织
/path/to/skdir/MyPdeSketch/MyPdeSketch.pde /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h
(原则上, /path/to/skdir/
这里相当于~/sketchbook/
/path/to/skdir/
~/sketchbook/
)
对我有效的是这样的:
mkdir /path/to/arduino-0022/libraries/MyLibClass ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/
重新启动IDE之后, MyLibClass
应显示在“Sketch / Import Library”下。
请注意,目前为止我只能看到库类文件引用其他库文件的唯一方法是将它们包含在相对位置(从“当前位置”),假设它们全部位于相同的arduino-0022/libraries
文件夹中(可能相关的堆栈溢出问题: 是否有可能使用Arduino IDE包含来自其他库的库? )。
否则,也应该可以将MyLibClass
目录直接链接到arduino-0022/libraries
(而不是手动创build目录,然后对文件进行符号链接)。 出于同样的原因,符号链接到备用位置~/sketchbook/libraries
也可能是有问题的。
最后,一个可能更好的组织可能是:
/path/to/skdir/MyLibClass/MyLibClass.cpp /path/to/skdir/MyLibClass/MyLibClass.h /path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde
…符号链接到libraries
,会迫使MyPdeSketch
显示在Arduino IDE中的MyLibClass
库的示例下(但是,如果您想在一个目录下自行包含多个类文件夹,则可能不适用)。
编辑:或者只是使用一个Makefile – 这将直接与avr-gcc
,绕过Arduino IDE(在这种情况下,写生簿文件组织可以有点松动)。
不幸的是,Arduino的IDE是可怕的,并没有显示改善的迹象。 没有真正的构build系统,所以它只能让你build立驻留在一个目录中的程序。
唯一真正的解决scheme是编写一个makefile,然后你可以使用一个真正的IDE。 我希望有一天有人会为QtCreator写一个Arduino插件。
这里是一个例子makefile:
想想我知道你需要什么。
你有一个项目文件夹说MYPROJ_FOLDER ,你想包括一个库文件夹,其中包含更多的儿童文件夹为您的自定义库。
您需要执行以下操作:1-创build文件夹,如下所示:
-MyProjFolder -MyProjFolder/MyProjFolder
然后用.ino扩展名创build一个文件夹名称-MyProjFolder / MyProjFolder / MyProjFolder.ino
2-创build库文件夹:-MyProjFolder /库<<<<<名称不应该是这样调用的选项。
3-然后创build你自己的库-MyProjFolder / libraries / lib1 -MyProjFolder / libraries / lib1 / lib1.cpp -MyProjFolder / libraries / lib1 / examples <<<<这是一个文件夹-MyProjFolder / libraries / lib1 / examples / example1
重复第3步,尽可能多的
我的工作是创build一个目录,例如在草图目录下的“src”,在每个个人图书馆的目录下。
例:
我有一个名为ObstacleRobot的项目,在我的草图文件夹下,命名为obstaclerobot(由IDE自动创build),在那里我的草图“obstacleRobot.ino”
到目前为止,我们有:
/ObstacleRobot /obstaclerobot obstacleRobot.ino
然后我想包括一个与这个项目完全相关的个人图书馆,把它包含在IDE库中是没有意义的,事实上,我想为机器人的每个部分都做这个,但是我仍然在努力。
最后为我工作的是:
/ObstacleRobot /obstaclerobot obstacleRobot.ino /src /Sonar Sonar.h Sonar.cpp
那么你在主要草图中要做的是写如下的include:
#include "src/Sonar/Sonar.h"
就这样。
遵循Hefny的说法,让你的项目成为你的图书馆的一个例子。
例如(Unix环境),让我们说库是在〜arduino /库
你创build你的项目〜arduino / libraries / MyProject,你的库去那里(例如〜/ arduino / libraries / MyProject / module1.h〜/ arduino / libraries / MyProject / module1.cpp〜/ arduino / libraries / MyProject / module2。 h〜/ arduino / libraries / MyProject / module2.cpp
现在:mkdir -p〜arduino / libraries / MyProject / examples / myproj
编辑〜arduino /库/ MyProject / examples / myproj / myproj.ino(注意,这不是例子/ myproj.ino,但是examples / myproj / myproj.ino)
重新启动IDE,您应该在菜单File / Example / MyProject中find您的项目。
另外请注意,您使用#include进行包含
为什么不用一个拷贝命令写一个脚本,将我们的库从我们的库所在的位置复制到arduino IDE库文件夹?
这样我们就可以保持我们想要的文件结构,并且无需大惊小怪地使用IDE库的需求。
像这样的东西适合我:
cp -r mylibs/* ~/Documents/programs/arduino-1.5.8/libraries/.
请注意,path是相对于我自己的文件结构。
希望这有助于某人。 这包括我未来的自我,我敢打赌,将在不久的将来阅读这个…像往常一样!
Ĵ