Mbed OSの共有機能
Mbed Studioで1GBほどあるOSのコードを複数プロジェクトで共有することでストレージの圧迫を防ぐ機能が追加されました
- Managing libraries (Using a shared instance of Mbed OSの項目)
Mbed OS以外のライブラリへの転用
Mbed OSの共有だとストレージの圧迫を防ぐことが主かもしれませんが複数のプロジェクトで使用している開発中のライブラリが個人開発してる規模の小さめのライブラリなどであればGitなどを返さずにほかのプロジェクトにも反映されるのは割とうれしいことだったりするかもしれません
(ロボコンの開発中にいちいちGit操作するのが面倒だっただけ)
ライブラリを共有した場合
常に一か所からライブラリを参照する
やること
フォルダのジャンクション機能を使ってリンクさせます
Windows環境以外でもジャンクション機能を使えば同じことはできるはず(確認してません)
方法
参照元となるライブラリを置いておくフォルダを作る。
Mbed Studioのプロジェクトにおいておけば更新とか楽なので「ShareOS」とか適当なプロジェクトを作ってライブラリをダウンロードする
ライブラリのリンクを行いたいプロジェクトのディレクトリ↓でコマンドプロンプトを開く
以下のコマンドでジャンクションを作成
mklink /j <ライブラリ名> <参照元のディレクトリの完全パス>
今回の例だとこんな感じ
mklink /j ArduinoUsbHostShield "C:\Users\<hoge>\Mbed Programs\ShareOS\ArduinoUsbHostShield"
Mbed Programs
みたいな空白が入ってるディレクトリ名はコマンドの区切れ目と認識されるのでパスは" "
でくくる
ジャンクションが作成されましたと出ればOK
ショートカットと同じマークがついたディレクトリが作成されている
あとはライブラリとして認識させるために<ライブラリ名>.lib
ファイルを参照元からコピペしてくる
バッチファイル(.bat)で作業を簡単にする
以下を文字コードShift-JISで保存
@echo off
cd %~dp0
if exist "%1" (
set varlibpath=%~f1.lib
REM echo フォルダ発見
REM echo 必要ライブラリファイル名: %varlibpath%
if exist "%varlibpath%" (
REM echo ライブラリファイル発見
echo ジャンクションを作成します
mklink /j %~n1 "%~f1"
echo ライブラリファイルをコピーします
copy "%varlibpath%" "%~dp0%~n1.lib"
echo 作業が終了しました
goto end
) else (
echo ライブラリファイルが見つかりません
)
) else (
echo 有効なパスではありません
)
:end
PAUSE
exit /b 0
このバッチファイルをライブラリのリンクをしたいディレクトリに置く
バッチファイルを置いたディレクトリ(左)とライブラリを置いてるディレクトリ(右)を開いてライブラリのフォルダをバッチファイルにドラッグ&ドロップする