我想包括一个类似Logging的依赖项。在其页面上显示:
- 下载压缩文件
- 将日志记录文件夹放在“ libraries \”中。
我不想(以Maven的心态)相信这是我们在Arduino项目中管理依赖项的方式。这意味着,签出我的软件包的每个人都必须在本地重复这些步骤(或者您在版本控制中是否包含“ libraries \”),依赖性管理的最佳实践是什么?
crosscompiling
我想包括一个类似Logging的依赖项。在其页面上显示:
我不想(以Maven的心态)相信这是我们在Arduino项目中管理依赖项的方式。这意味着,签出我的软件包的每个人都必须在本地重复这些步骤(或者您在版本控制中是否包含“ libraries \”),依赖性管理的最佳实践是什么?
crosscompiling
Answers:
Arduino对于非技术人员来说是一种简单的方法,因此它从普通视图中隐藏起来尽可能简单。
对于简单的项目,它的工作成本是在各处复制库并使用Arduino的“ IDE”。调用程序“草图”并对其进行隐藏以使其处于C ++中。等等等等。
如果您想进行更复杂的项目,版本控制,良好的环境等,则需要离开“简单的Arduino之路”,并开始使用更强大,更复杂的工具。
我个人使用 https://github.com/sudar/Arduino-Makefile https://github.com/ladislas/Bare-Arduino-Project, 并将其保存在GIT存储库中。
这样,我可以在组中的项目之间共享库,还可以链接到树状结构外部的库,以及gits子模块,都可以让您从第三方更新的库适用于所有项目,包括那些旧项目。
我仍然使用很多Arduino(例如setup / loop,digitalRead等),但在此过程中我也使用了“常规” g ++构造。稍后,我可能会使用一些RTOS,甚至更多地转向纯C / g ++ / ..代码,但是现在我的需求还不是很远。(谷歌“ arduino rtos”我目前正在阅读https://github.com/greiman/NilRTOS-Arduino)
无论如何,Arduino并不意味着是“最佳实践”。它的意思是“什么都不知道的情况下快速简便地做某事”。它的工作原理是,任何人和他的狗都可以从Arduino开始,如果有兴趣的话,他可以自己走得更远,或者他可以坚持并轻松玩乐。
如果要使项目自成体系,则可以将库依赖项放在sketch文件夹中。因此,具有Logging库依赖关系的Foo草图的文件夹结构将如下所示:
Foo
|_Foo.ino
|_src
|_Logging
|_Logging.h
|_Logging.cpp
在Foo.ino中,您将包括这样的库:
#include "src/Logging/Logging.h"
不幸的是,某些库使用了不正确的包含语法,当将库安装在库文件夹之一中但在草图文件夹中时,该语法仍然有效。日志记录库确实使用正确的包含语法,但有时要将库放入草图文件夹中,您需要对其进行修复。例如,假设您有一个名为Bar的库,并且在Bar.cpp中看到以下内容:
#include <Bar.h>
这将不起作用,因为如果安装在草图文件夹中,Bar.h不会位于标准包含路径之一中,那么您需要编辑Bar.cpp并将include语法更改为:
#include "Bar.h"
这将导致在本地文件夹中搜索包含的文件。
该系统的缺点是您可能会获得一个库的多个副本,因此更新或修改每个副本的工作量更大。当然,这也会带来好处,因为每个项目都可以拥有自己的已知版本的库,而不会受到对其他项目中使用的同一库所做的任何更新的影响。
我通常只是将有关如何以常规方式安装库依赖项的说明添加到项目文档中。这应该在普通Arduino用户的能力范围内。如果需要特定版本的库,则可以进行记录。但是,在某些情况下,我想将一个独立的项目交给不熟悉Arduino IDE的人使用,也就是说,当我将上述系统用于所有必要的第三方库时。