(toppers-etrobo 60) サブディレクトリのソースコードを取り込むための追加
Takayuki TOGOU
ishidai @ mbr.nifty.com
2016年 6月 2日 (木) 12:35:43 JST
ETロボコン2016関西地区実行委員の都甲です。
ML初投稿です。
EV3RT Beta 6-2の sdk/workspace にあるサンプルコードには、
サブディレクトリの存在する場合がなく、全てのサンプルでファイルが
フラットに配置されております。
先日ETロボコン地区MLにてサブディレクトリのある場合もビルドしたい
旨の相談を受けて、その時は個別対応でクリアしたのですが、EV3RT の
本式として「サブディレクトリはどうなっているか」調べてみました。
開発環境は Cygwin + GNUARM 4.8 2014q3 です。
sdk/common/Makefile.img の「ソースファイルのあるディレクトリに
関する定義」のあたりで、アプリケーションディレクトリの下位の
include ディレクトリと src ディレクトリのパスを取得しているところが
あり、このディレクトリの作法を守ってサブディレクトリを作り、
Makefile.incにオブジェクトファイルを追加することで、make img=*
のビルドはできるようです。
(helloev3の場合)
sdk
└─workspace
├─helloev3
└─helloev3-subdir
| ├─include
| └─src
└─subdir
├─include
└─src
一方 make app=* でのビルドでは、make img=* と同じ対応を取っても
サブディレクトリが見つけられずに失敗します。そこで「ソース
ファイルのあるディレクトリに関する定義」の一部を応用して、
sdk/common/Makefile.app でもサブディレクトリを取り込めるように
改修を加えました。
diff -r -u hrp2.orig/sdk/common/Makefile.app hrp2/sdk/common/Makefile.app
--- hrp2.orig/sdk/common/Makefile.app 2016-03-17 08:45:03.000000000 +0900
+++ hrp2/sdk/common/Makefile.app 2016-05-30 17:42:02.040405600 +0900
@@ -45,6 +45,12 @@
OMIT_DEBUG_INFO = 1
#
+# ソースファイルのあるディレクトリに関する定義
+#
+INCLUDES += $(foreach dir,$(shell find @(APPLDIR) -type d -name
include),-I$(dir))
+SRCDIRS += $(foreach dir,$(shell find @(APPLDIR) -type d -name src),$(dir))
+
+#
# Include common part
#
BUILD_LOADABLE_MODULE = 1
これで make img=* と同様に make app=* でもビルドできるように
なりました。
beta4やbeta5の場合は、サンプルを流用して Makefile.appmod に
同様の修正を加えると make mod=* でもサブディレクトリが使える
ようになります。
以上ご検討くださいませ。
--
都甲 隆之 <ishidai @ mbr.nifty.com>