web-dev-qa-db-ja.com

Arduino IDEを使用して別のライブラリのライブラリを含めることは可能ですか?

Macの〜/ Documents/Arduino/librariesディレクトリにインストールした別のライブラリを参照するArduinoライブラリ(事実上C++クラス)を作成しようとしています。

私が書いているライブラリの.cppの上部で、私は試しました

#include <ReferencedLibrary.h>

そして

#include "ReferencedLibrary.h"

...どちらも機能しません。私はうまく#include <ReferencedLibrary.h>〜/Documents/Arduinoディレクトリのスケッチから。私は何かが足りないのですか、それともこれはArduino IDE/makefileの制限ですか?回避策はありますか?

18
Robert Atkins

この問題は、Arduino1.6.6リリースで解決されました。 1.6.6のリリースノートには、ライブラリ間の依存関係が修正されたことが記載されています。

ライブラリ間の依存関係:スケッチがライブラリをインポートし、そのライブラリが別のライブラリを使用する場合、IDEは、無駄な#includeをスケッチに追加しなくても検出されます。

バージョンを1.6.6以降に更新すると、問題が解決します。

6
agakshat

相対パスを使用して、別のArduinoライブラリにライブラリを含めることができました。たとえば、AbstractSwitchライブラリをDigitalSwitchライブラリに含めるには、これらのライブラリの両方がArduinoの標準ライブラリフォルダ内の独自の個別のフォルダにあると仮定して、次のincludeステートメントを使用できます。

#include "../AbstractSwitch/AbstractSwitch.h"

つまり、includeステートメントは次のようになります。

#include "../LibraryFolder/LibraryHeaderFile.h"
12
julioterra

ここのドキュメント https://github.com/arduino/Arduino/wiki/Build-Process は次のように述べています:

インクルードパスには、スケッチのディレクトリ、ターゲットディレクトリ(/ hardware/core //)、avrインクルードディレクトリ(/ hardware/tools/avr/avr/include /)、およびライブラリディレクトリ(/ hardware/libraries内)が含まれます。 /)メインスケッチファイルに含まれているヘッダーファイルが含まれています。

これは、あなたが#include "ReferencedLibrary.h"メインスケッチファイルから、これにより、そのファイルのlibrariesディレクトリが、他のライブラリがインクルードするインクルードパスに追加されます。ちょっとしたハックですが、私のMacでは動作します。

11
nicolaskruchten

Arduino環境を使用すると、私が理解しているように、他の独自のライブラリから独自のライブラリにアクセスすることはできません。パスを追加する方法はないため、コンパイラがコードを見つける方法はありません。そのため、別のライブラリでコードを使用するライブラリを作成するのは困難です。私のウェブ調査によると、これは何年もの間問題でしたが、私の知る限りでは解決されていません。実装の詳細に問題があるか、機能を犠牲にしてシステムをシンプルに保ちたいという願望があるのではないかと思います。

もちろん、新しいライブラリにはいつでもコードをカットアンドペーストできますが、それは非常に最適ではありません。また、すべてのコードを含む1つの巨大なライブラリを1組の.hファイルと.cppファイルに書き込むこともできます。それもあまり満足のいくものではありませんが、私は時々それをしました。

ただし、sketchbook/librariesディレクトリに配置する独自のライブラリで標準のArduinoライブラリを使用するための回避策があります。スケッチには標準ライブラリの場所へのパスが含まれ、標準ライブラリコードがリンクされているため、目的の標準ライブラリのヘッダーファイルをスケッチに含めることができます。その下のスケッチにも、独自のライブラリヘッダーファイルをインクルードします。これで、標準ライブラリがライブラリとスケッチで使用できるようになります。

3
Tim Egbert

推奨されない方法:基本的に任意の外部ライブラリコードをArduinoに追加することができますIDE boards.txtファイルをknifingしてビルドします。c/ cppフラグのヘッダーとldフラグのライブラリ。これは便利な場合があります。外部ツールを使用するライブラリ開発用(今日の私にとってはcmake/QTクリエーター)。

/home/pekka/arduino-1.8.5/hardware/teensy/avr/boards.txtをgccincludepathとE_OS_arduinodefineに「/ coderoot」を追加して変更しました。以下の行を変更しました。

teensy36.build.flags.cpp = -fno-exceptions -felide-constructors -std = gnu ++ 14 -Wno-error = narrowing -fno-rtti -I/coderoot -DE_OS_arduino

teensy36.build.flags.c = -I/coderoot -DE_OS_arduino

1