2018年9月19日水曜日

Arduinoでサブディレクトリからライブラリを読み込む

こんにちは、mokerです。

今回はタイトルの通りサブディレクトリのライブラリを読み込む方法についてです。
ちょっとした自作ライブラリを作ったのですが、「共通のlibraryフォルダに置いたり、ArduinoIDEに読み込ませるほどでもないな・・・」ということでサブディレクトリに配置したいと考えました。

検索したところ、日本語でヒットするのは、こちらのページ:Arduino用スケッチのサブルーチンをサブディレクトリに配置する: 猫にコ・ン・バ・ン・ワ

なるほどと思い、次のようにディレクトリを作成(思えばここで素直にサイトに従っておけばよかった)。
┬hogehoge.ino
└lib
 └HogeLib
  ├HogeLib.h
  └HogeLib.cpp
 hogehoge.inoで「#include "lib/HogeLib/HogeLib.h"」とするとヘッダファイルは読み込まれました。
しかし、「Undefined referrence to HogeLib(int, int, etc)」というエラーが発生。つまり、cppファイルが読み込まれていないようなのです。

いろいろ調べてみると原因はこれ:Copy whole sketch source into temp folder to allow local inclusion by cmaglie · Pull Request #172 · arduino/arduino-builder · GitHub
つまり、hogehoge.inoと同じフォルダにsrcというディレクトリを作成し、その下にcppを配置しないとコンパイル時に読み込まれないようです(src直下じゃなくても大丈夫っぽい)。
そこで、次のような構造にしたらうまくいきました。
┬hogehoge.ino
└src
 └HogeLib
  ├HogeLib.h
  └HogeLib.cpp
keywords.txtは反応してないような気もしますが、普段使うのはvsCodeなのでまあどちらでもいいか、という結論に達しました。

<余談>
Arduino一時期触ってなかったので知らなかったのですが、1.5でライブラリ関連は前方互換が途絶えてるんですね・・・。
Githubにまとめられてました:Arduino IDE 1.5: Library specification · arduino/Arduino Wiki · GitHub
日本語だとこことか良くまとまっててよかったです:Arduino開発環境用の「ライブラリ」を作成してみる | KEI SAKAKI's PAGE.

1 件のコメント:

  1. How to Play Baccarat in Vegas - FABCASINO.COM
    Baccarat is one of the 바카라 fastest and easiest 1xbet korean card games you'll ever play. You can play the game on your smartphone or computer. 바카라

    返信削除