Real-Time Workshop User's Guide    

テンプレートMakeファイル

テンプレートmakeファイルを構成またはカスタマイズするには、makeコマンドがどのように動作してmakeファイルを処理するかを知っておいてください。また、makeファイルのビルドの規則も理解しておいてください。これらのトピックスの情報は、利用するmakeユーティリティに付属するドキュメントを参照してください。makeユーティリティに関して出版されている良い書籍もあります。

テンプレートmakeファイルは、トークンを含むステートメントで構成されます。Real-Time Workshopのビルドプロセスは、トークンを展開し、makeファイル、model.mkを作成します。テンプレートmakeファイルは、固有のプラットフォーム上で固有のmakeファイルを生成するために設計されています。生成されたmodel.mkファイルは、特にユーザの開発システムに固有のコマンドを使って、ユーザモデルから生成されたコードをコンパイル、リンクするために作成されています。

図 17-5: model.mkの作成

テンプレートMakeファイルのトークン

make_rtw M-ファイルコマンド(またはターゲットに付属する他のコマンド)は、model.mkの生成のプロセスを指示します。make_rtwコマンドは、Simulation ParametersダイアログのReal-Time WorkshopページのTarget configurationセクションで指定されたテンプレートmakeファイルを処理します。make_rtwは、テンプレートmakeファイルを行ごとにコピーし、各トークンを展開します。表 17-3は、トークンとそれらの展開の一覧です。

表 17-3: make_rtwによって展開されたテンプレートmakeファイルのトークン 
トークン
展開
|>COMPUTER<|
コンピュータのタイプ。MATLABのcomputerコマンドを参照。

|>MAKEFILE_NAME<|

model.mk -- テンプレートmakeファイルから作成されたmakeファイル名。

|>MATLAB_ROOT<|

MATLABがインストールされている位置のパス。

|>MATLAB_BIN<|

MATLAB実行ファイルの位置。

|>MEM_ALLOC<|

RT_MALLOCまたはRT_STATIC。メモリがどのように割り当てられるかを示します。

|>MEXEXT<|

MEX-ファイルの拡張子。MATLABのmexextコマンドを参照。

|>MODEL_NAME<|

現在ビルドされているSimulinkブロック線図名。

|>MODEL_MODULES<|

その他の生成されたソース(.c)モジュール。たとえば、大規模なモデルを2つのファイルmodel.cmodel1.cに分割することが可能です。この場合、このトークンはmodel1.cに展開されます。

|>MODEL_MODULES_OBJ<|

その他の生成されたソース(.c)モジュールに対応するオブジェクトファイル名(.obj)。

|>MULTITASKING<|

ソルバモードがマルチタスクならばTrue (1)、そうでなければFalse (0)。

|>NUMST<|
モデル内のサンプル時間数。
|>RELEASE_VERSION<|

MATLABのリリースバージョン番号。

|>S_FUNCTIONS<|

非インラインS-Function(.c)ソースのリスト。

|>S_FUNCTIONS_LIB<|

リンク可能なS-Functionライブラリのリスト。

|>S_FUNCTIONS_OBJ<|

非インラインS-Functionソースに対応するオブジェクト(.obj)ファイルリスト。

|>SOLVER<|
ソルバのソースファイル名。例, ode3.c.
|>SOLVER_OBJ<|
ソルバのオブジェクト(.obj)ファイル名。例., ode3.obj.
|>TID01EQ<|
連続タスクと最初の離散タスクのサンプリングレートが等しい場合はTrue (1)、そうでない場合はFalse (0)
|>NCSTATES<|
連続状態数。
|>BUILDARGS<|
make_rtwに渡されるオプション。このトークンは、ビルドの引数の変更時にmodel.mkファイルの内容が変更されるように与えられるので、ビルドオプションの変更時にはすべてのモジュールを強制的にアップデートします。
|>EXT_MODE<|
externalモードのサポートコードの生成が可能な場合はTrue (1)、そうでない場合はFalse (0)。

これらのトークンは、ビルドプロセスで既知のパラメータ値を置き換えることによって展開されます。たとえば、ソースモデルが2つの異なるサンプル時間をもつブロックを含む場合、テンプレートmakeファイルステートメント

は、以下をmodel.mkで展開します。

上記に加えて、make_rtwはトークンを他のソースから展開します。

Makeコマンド

テンプレートmakeファイルからmodel.mkを作成した後で、Real-Time Workshop は、makeコマンドを呼びます。makeを呼ぶために、Real-Time Workshop はつぎのコマンドを実行します。

makecommand は、システムのテンプレートmakeファイルのMAKEマクロで定義されます(図 17-6を参照)。Real-Time WorkshopページのMake commandフィールドでmakeの他のオプションを指定できます(「Make コマンドフィールド」「テンプレートMakeファイルとMakeオプション」を参照)。

たとえば、Make commandフィールドでOPT_OPTS=-O2と指定すると、make_rtwはつぎのmakeコマンドを生成します。

テンプレート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がつぎのコマンド形式をサポートすることを確認します。

テンプレートMakeファイルの構造

テンプレートmakeファイルには、4つのセクションがあります。

図 17-6は、テンプレートmakeファイルの一般的な構造を示します。

図 17-6: テンプレートMakeファイルの構造

テンプレートmakeファイルのカスタマイズと作成

新規のテンプレートmakeファイルをカスタマイズまたは作成するには、既存のテンプレートmakeファイルをローカルな作業ディレクトリにコピーして、それを変更することを推奨します。

この節では、例題を使って、model.mkファイルにコマンドを生成するための、テンプレートmakeファイルのマクロとファイルのパターンマッチング表現の使用法を説明します。

makeユーティリティは、model.mk makeファイルを処理し、model.mkで定義された依存性の規則を基に、コマンドを生成します。makeは、testのビルドまたは再ビルドに必要なコマンドを生成した後で、それらを実行します。

たとえば、testというプログラムをビルドするには、makeはオブジェクトファイルをリンクする必要があります。しかし、オブジェクトがファイルが存在しないか、あるいは期限切れの場合は、makeはCコードをコンパイルしなければなりません。そのため、ソースファイルとオブジェクトファイルには依存性があります。

makefile1.cfile2.cから作成されたtestというプログラムを考えます。makeのほとんどのバージョンを使うと、依存性の規則は、つぎのようになります。

この例題では、UNIX環境を仮定します。PC環境では、ファイルの拡張子およびコンパイル、リンクコマンドは異なります。

最初の規則の処理において

makeは、testをビルドするには、file1.ofile2.oをビルドすることが必要なことがわかります。file1.oをビルドするには、makeは以下の規則を処理します。

file1.oが存在しない場合またはfile1.ofile1.cよりも古い場合は、makefile1.cをコンパイルします。

Real-Time Workshopのテンプレートmakeファイルのフォーマットは、上記の例に従います。ここでのテンプレートmakeファイルは、マクロやファイルのパターンマッチング表現のようなその他のmakeの機能を利用します。ほとんどのバージョンのmakeにおいて、マクロはつぎのように定義されます。

マクロへの参照は、$(MACRO_NAME)によって行われます。makeがこの形式の表現を見るとき、value$(MACRO_NAME)で置き換えます。

パターンマッチング表現を使って依存性の規則をより一般的にすることが可能です。たとえば、GNU Makeを使って2つの"file1.o: file1.c"と"file2.o: file2.c"の規則を以下の1つの規則で置き換えられます。

上記の$<は、依存性ファイル(file1.cまたはfile2.c)と等しい特殊なマクロです。そのため、マクロと "%" パターンマッチングキャラクタを使って、上記の例は以下のように減らすことができます。

上記の$@マクロは、このtestで、カレントの依存するターゲット名と等しい特殊なマクロです。

この例題は、マクロ展開のための文字列置換機能を使って、ソースのリスト(SRCS)からオブジェクトのリスト(OBJS)を生成します。ソースファイルの拡張子(.c)をオブジェクトファイルの拡張子(.o)で置き換えます。この例題は、また、特殊な"$@"マクロを使って、プログラムtestのビルドの規則を一般化します。


 カスタムターゲットをSystem Target File Browserに追加 デバイスドライバの作成