Real-Time Workshop User's Guide | ![]() ![]() |
テンプレートMakeファイル
テンプレートmakeファイルを構成またはカスタマイズするには、make
コマンドがどのように動作してmakeファイルを処理するかを知っておいてください。また、makeファイルのビルドの規則も理解しておいてください。これらのトピックスの情報は、利用するmake
ユーティリティに付属するドキュメントを参照してください。makeユーティリティに関して出版されている良い書籍もあります。
テンプレートmakeファイルは、トークンを含むステートメントで構成されます。Real-Time Workshopのビルドプロセスは、トークンを展開し、makeファイル、model
.mk
を作成します。テンプレートmakeファイルは、固有のプラットフォーム上で固有のmakeファイルを生成するために設計されています。生成されたmodel
.mk
ファイルは、特にユーザの開発システムに固有のコマンドを使って、ユーザモデルから生成されたコードをコンパイル、リンクするために作成されています。
テンプレートMakeファイルのトークン
make_rtw
M-ファイルコマンド(またはターゲットに付属する他のコマンド)は、model
.mk
の生成のプロセスを指示します。make_rtw
コマンドは、Simulation ParametersダイアログのReal-Time WorkshopページのTarget configurationセクションで指定されたテンプレートmakeファイルを処理します。make_rtw
は、テンプレートmakeファイルを行ごとにコピーし、各トークンを展開します。表 17-3は、トークンとそれらの展開の一覧です。
これらのトークンは、ビルドプロセスで既知のパラメータ値を置き換えることによって展開されます。たとえば、ソースモデルが2つの異なるサンプル時間をもつブロックを含む場合、テンプレートmakeファイルステートメント
NUMST = |>NUMST<|
NUMST = 2
上記に加えて、make_rtw
はトークンを他のソースから展開します。
makevariable
フィールドをもつrtwoptions
構造体配列内の任意の構造体が展開されます。つぎの例は、matlabroot
\rtw\c\grt\grt.tlc
からのものです。BEGIN_RTW_OPTIONS
で始まるセクションは、rtwoptions
を設定するM-ファイルコードを含みます。指示文
rtwoptions(2).makevariable = 'EXT_MODE'
によって、|>EXT_MODE<|
トークンは、Real-Time WorkshopページのCode generation optionsセクションのExternal modeオプションをどのように設定したかに応じて、1
(on)または0
(off)に展開されます。
Makeコマンド
テンプレートmakeファイルからmodel.mk
を作成した後で、Real-Time Workshop は、make
コマンドを呼びます。make
を呼ぶために、Real-Time Workshop はつぎのコマンドを実行します。
makecommand
-f
model
.mk
makecommand
は、システムのテンプレートmakeファイルのMAKE
マクロで定義されます(図 17-6を参照)。Real-Time WorkshopページのMake commandフィールドでmake
の他のオプションを指定できます(「Make コマンドフィールド」と「テンプレートMakeファイルとMakeオプション」を参照)。
たとえば、Make commandフィールドでOPT_OPTS=-O2
と指定すると、make_rtw
はつぎのmake
コマンドを生成します。
makecommand
-f
model
.mkOPT_OPTS=-O2
テンプレートmakeファイルの先頭のコメントは、利用可能なmake
コマンドオプションを指定します。これらのオプションが十分な柔軟性を与えない場合は、ユーザ独自のテンプレートmakeファイルを構成することが可能です。
makeユーティリティにより、リアルタイムプログラムのビルドのほとんどすべての面をユーザが制御します。利用可能なmake
にはいくつかの異なるバージョンがあります。Real-Time Workshopは、matlabroot
\rtw\bin
のプラットフォーム固有のサブディレクトリにUNIXおよびPCプラットフォーム用のFree Software Foundation's GNU Makeを提供しています。
Real-Time Workshopではその他のバージョンのmake
を利用可能ですが、GNU Makeを推奨します。Real-Time Workshopとの互換性を保証するには、make
がつぎのコマンド形式をサポートすることを確認します。
makecommand
-fmodel
.mk
テンプレートMakeファイルの構造
テンプレートmakeファイルには、4つのセクションがあります。
make_rtw
に指示するマクロを定義します。マクロは、以下の通りです。MAKE
-- これは、makeユーティリティを呼ぶためのコマンドです。たとえば、MAKE
= mymake
ならば、make
コマンドの実行は、mymake
-f
model
.mk
です。
HOST
-- このテンプレートmakeファイルがターゲットとするプラットフォーム。これは、HOST=PC
, UNIX
, computer_name
(MATLABのcomputer
コマンドを参照)またはANY
です。BUILD
-- これは、Real-Time Workshopのビルド手順からmake
を呼ぶかどうか(BUILD=yes
またはno
)をmake_rtw
に指示します。SYS_TARGET_FILE
-- システムターゲットファイル名。これは、正しいシステムターゲットファイルがSimulation ParametersダイアログボックスのReal-Time WorkshopページのTarget configurationセクションで指定されていることを保証するために、make_rtw
による一貫性のチェックで利用されます。BUILD_SUCCESS
-- PCでmake
が正常終了したときに表示される、ビルドのsuccess文字列を指定するオプションのマクロ。たとえば、BUILD_SUCCESS = ### Successful creation of
BUILD_ERROR
-- make
手順中にエラーが発生したとき表示されるビルドエラーメッセージを指定するオプションのマクロ。たとえば、BUILD_ERROR = ['Error while building ', modelName]
つぎのDOWNLOAD
オプションは、Tornadoターゲットにのみ適用されます。
DOWNLOAD
-- yesまたはnoと指定するオプションのマクロ。yes (かつBUILD=yes
)と指定すると、make
はダウンロードターゲットで2回呼ばれます。make -f
model
.mk download
DOWNLOAD_SUCCESS
-- 正常なダウンロードを探しているときに利用するダウンロード成功文字列を指定するためのオプションマクロ。たとえば、DOWNLOAD_SUCCESS = ### Downloaded
DOWNLOAD_ERROR
-- ダウンロード中にエラーが発生したときに表示されるダウンロードエラーメッセージを指定するためのオプションマクロ。たとえば、DOWNLOAD_ERROR = ['Error while downloading ', modelName]
make_rtw
の拡張を定義します(表17-3を参照)。図 17-6は、テンプレートmakeファイルの一般的な構造を示します。
テンプレートmakeファイルのカスタマイズと作成
新規のテンプレートmakeファイルをカスタマイズまたは作成するには、既存のテンプレートmakeファイルをローカルな作業ディレクトリにコピーして、それを変更することを推奨します。
この節では、例題を使って、model
.mk
ファイルにコマンドを生成するための、テンプレートmakeファイルのマクロとファイルのパターンマッチング表現の使用法を説明します。
makeユーティリティは、model
.mk
makeファイルを処理し、model
.mk
で定義された依存性の規則を基に、コマンドを生成します。make
は、test
のビルドまたは再ビルドに必要なコマンドを生成した後で、それらを実行します。
たとえば、test
というプログラムをビルドするには、make
はオブジェクトファイルをリンクする必要があります。しかし、オブジェクトがファイルが存在しないか、あるいは期限切れの場合は、make
はCコードをコンパイルしなければなりません。そのため、ソースファイルとオブジェクトファイルには依存性があります。
make
file1.cとfile2.c
から作成されたtest
というプログラムを考えます。make
のほとんどのバージョンを使うと、依存性の規則は、つぎのようになります。
test: file1.o file2.o cc -o test file1.o file2.o file1.o: file1.c cc -c file1.c file2.o: file2.c cc -c file2.c
この例題では、UNIX環境を仮定します。PC環境では、ファイルの拡張子およびコンパイル、リンクコマンドは異なります。
test: file1.o file2.o
make
は、test
をビルドするには、file1.o
とfile2.o
をビルドすることが必要なことがわかります。file1.o
をビルドするには、make
は以下の規則を処理します。
file1.o: file1.c
file1.o
が存在しない場合またはfile1.o
がfile1.c
よりも古い場合は、make
はfile1.c
をコンパイルします。
Real-Time Workshopのテンプレートmakeファイルのフォーマットは、上記の例に従います。ここでのテンプレートmakeファイルは、マクロやファイルのパターンマッチング表現のようなその他のmake
の機能を利用します。ほとんどのバージョンのmake
において、マクロはつぎのように定義されます。
MACRO_NAME = value
マクロへの参照は、$(MACRO_NAME)
によって行われます。make
がこの形式の表現を見るとき、value
を$(MACRO_NAME)
で置き換えます。
パターンマッチング表現を使って依存性の規則をより一般的にすることが可能です。たとえば、GNU Makeを使って2つの"file1.o: file1.c
"と"file2.o: file2.c"
の規則を以下の1つの規則で置き換えられます。
%.o : %.c cc -c $<
上記の$<
は、依存性ファイル(file1.c
またはfile2.c
)と等しい特殊なマクロです。そのため、マクロと "%
" パターンマッチングキャラクタを使って、上記の例は以下のように減らすことができます。
SRCS = file1.c file2.c OBJS = $(SRCS:.c=.o) test: $(OBJS) cc -o $@ $(OBJS) %.o : %.c cc -c $<
上記の$@
マクロは、このtest
で、カレントの依存するターゲット名と等しい特殊なマクロです。
この例題は、マクロ展開のための文字列置換機能を使って、ソースのリスト(SRCS
)からオブジェクトのリスト(OBJS
)を生成します。ソースファイルの拡張子(.c
)をオブジェクトファイルの拡張子(.o
)で置き換えます。この例題は、また、特殊な"$@
"マクロを使って、プログラムtest
のビルドの規則を一般化します。
![]() | カスタムターゲットをSystem Target File Browserに追加 | デバイスドライバの作成 | ![]() |