| 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-fmodel.mk
makecommand は、システムのテンプレートmakeファイルのMAKEマクロで定義されます(図 17-6を参照)。Real-Time WorkshopページのMake commandフィールドでmakeの他のオプションを指定できます(「Make コマンドフィールド」と「テンプレートMakeファイルとMakeオプション」を参照)。
たとえば、Make commandフィールドでOPT_OPTS=-O2と指定すると、make_rtwはつぎのmakeコマンドを生成します。
makecommand-fmodel.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コードをコンパイルしなければなりません。そのため、ソースファイルとオブジェクトファイルには依存性があります。
makefile1.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に追加 | デバイスドライバの作成 | ![]() |