STF_make_rtw_hook ファイルによるビルド プロセスのカスタマイズ
ビルド プロセスでは、コード生成と make プロセスの特定の時点で実行されるフック メソッドに、オプションのカスタム コードを追加できます。フック メソッドを使用してターゲット固有の行動をビルド プロセスに追加することができます。
STF_make_rtw_hook ファイル
一般に
と呼ばれるファイル内のフック メソッドは変更できます。この STF
_make_rtw_hook.m
はシステム ターゲット ファイルの名前です (たとえば、STF
ert
や mytarget
など)。このファイルは関数
を実装します。この関数は渡された STF
_make_rtw_hookhookMethod
引数に依存し、特定の行動を送信します。
ビルド プロセスは
を呼び出し、引数 STF
_make_rtw_hookhookMethod
などの引数を渡します。ビルド プロセスに必要なフック メソッドのみを実装してください。
モデルに参照モデルが含まれている場合は、必要に応じて参照モデルごとに
を実装できます。ビルド プロセスは参照モデルごとにそれぞれ STF
_make_rtw_hook.m
を呼び出し、これらのファイルを (依存関係の順に) 再帰的に処理します。STF
_make_rtw_hook
STF_make_rtw_hook ファイルの使用に関する規則
ビルド プロセスが必ず
を呼び出すように、以下の条件が満たされていることを確認します。STF
_make_rtw_hook
ファイルが MATLAB® パス上にあること。STF
_make_rtw_hook.mファイル名がシステム ターゲット ファイル (
STF
) の名前であり、テキスト_make_rtw_hook.m
に付加されていること。たとえば、カスタムのシステム ターゲット ファイルmytarget.tlc
でコードを生成する場合、フック ファイルの名前はmytarget_make_rtw_hook.m
とし、そのファイル内で実装されたフック関数の名前はmytarget_make_rtw_hook
とします。ファイル内で実装されたフック関数が関数プロトタイプ STF_make_rtw_hook.m と引数で説明する関数プロトタイプを使用すること。
関数プロトタイプ STF_make_rtw_hook.m と引数
用の関数プロトタイプは、次のとおりです。STF
_make_rtw_hook
function STF_make_rtw_hook(hookMethod, modelName, rtwRoot, templateMakefile, buildOpts, buildArgs, buildInfo)
引数は、次のように定義されます。
hookMethod
:関数
が呼び出されるビルド プロセスの段階を指定する文字ベクトル。以下のフロー チャートはビルド プロセスをまとめたもので、フック点を強調表示しています。STF
_make_rtw_hookhookMethod
用の有効値は、'entry'
、'before_tlc'
、'after_tlc'
、'before_make'
、'after_make'
、'exit'
、'error'
です。関数
はSTF
_make_rtw_hookswitch
ステートメントで関連コードへ送信します。
modelName
:モデルの名前を指定する文字ベクトル。ビルド プロセスのすべての段階で有効です。rtwRoot
:予備。templateMakefile
:テンプレート makefile の名前。buildOpts
:Boolean のフィールドcodeWasUpToDate
が含まれている MATLAB 構造体。'before_make'
、'after_make'
、'exit'
段階のみで有効です。buildArgs
:make_rtw
への引数が含まれる文字ベクトル。ビルド プロセスを呼び出すと、buildArgs
は [コンフィギュレーション パラメーター] + [コード生成] + [make コマンド] フィールド内で"make_rtw"
に続く引数からコピーされます。たとえば、次の [make コマンド] フィールドの make 引数
make_rtw VAR1=0 VAR2=4
は、以下を生成します。
% make -f untitled.mk VAR1=0 VAR2=4
buildArgs
引数がツールチェーン アプローチのビルドに適用されないのは、これらのビルドがmake_rtw
呼び出しに make 引数を追加することができないためです。コンパイラ コマンド ラインで、TMF アプローチのビルドとツールチェーン アプローチのビルドの両方に適用されるカスタム定義 (たとえば、VAR1=0 VAR2=4
) を指定するには、[コンフィギュレーション パラメーター] 、 [コード生成] 、 [カスタム コード] 、 [定義] フィールドを使用します。buildInfo
:生成されたコードのコンパイルとリンクに関する情報を格納するRTW.BuildInfo
オブジェクト。'after_tlc'
、'before_make'
、'after_make'
、'exit'
段階のみで有効です。'after_tlc'
段階の終了時、このオブジェクト内の情報は完了していない可能性があります。さらに後の段階では、'before_make'
および'after_make'
フック メソッドもオブジェクトに情報を追加できます。RTW.BuildInfo
オブジェクトの使用方法の詳細については、コード コンパイルのカスタマイズを参照してください。
STF_make_rtw_hook.m の応用
この節では、
フック メソッドを使用する方法を説明します。STF
_make_rtw_hook.m
通常、'entry'
フックを使用してビルド プロセスを初期化し、コードを生成する前に、たとえば、設定を変更したり有効にしたりすることができます。'entry'
フックの応用の 1 つは、ターゲットの選択時に最初に起動した自動コンフィギュレーション スクリプトを再度実行し、スクリプトが認証を実行する前と後のモデル パラメーターを比較することです。
他のフック ポイント 'before_tlc'
、'after_tlc'
、'before_make'
、'after_make'
、'exit'
、'error'
は、外部のツール チェーン、ソース管理ツール、および他の環境ツールとインターフェイスする際に役立ちます。
たとえば、'entry'
後の段階で
ファイルを使用し、ビルド フォルダーへのパスを取得することができます。それから STF
_make_rtw_hook.m'exit'
段階で、ビルド フォルダー内で生成コードファイルを見つけ、それらをバージョン制御システム内にチェック インすることができます。コード生成中またはビルド プロセス時にエラーが発生する場合は、'error'
を使用して、フック関数が使用した静的データまたはグローバル データをクリーン アップすることができます。
メモ
ビルド プロセスは MATLAB 作業フォルダーを一時的に段階 'before_make'
、'after_make'
、'exit'
、'error'
用のビルド フォルダーに変更します。
ファイルはビルド フォルダーの位置に関して誤った仮定をしてはなりません。STF
_make_rtw_hook.m'entry'
段階後、ビルド フォルダーへのパスを取得することができます。以下の MATLAB コード例では、ビルド フォルダー パスは変数 buildDirPath
に文字ベクトルとして返されます。
buildDirPath = rtwprivate('get_makertwsettings',gcs,'BuildDirectory');
メモ
モデル コンフィギュレーションの変更には、
ファイルを使用しないでください。たとえば、以下にはフック メソッドを使用しないでください。STF
_make_rtw_hook.m
モデル バリアント間の切り替え。
関数
set_param
の呼び出し。
モデル コンフィギュレーションを変更すると、予期しないコード生成結果となる可能性があります。
STF_make_rtw_hook.m を使用したコード再生成の制御
モデルをリビルドするとき、既定の設定では、ビルド プロセスはモデルまたは関連する設定の変更によって、最上位モデルの再生成が必要かどうかを判断するために、チェックを実行します。(詳細については、最上位モデル コードの再生成の制御を参照)。チェック結果が最上位モデル コードの生成が必要であることを示している場合は、ビルド プロセスはモデル コードの完全な再生成とコンパイルを実行します。チェック結果が、最上位モデルの生成コードがモデルに対して最新であり、モデル設定に完全な再生成が必要ないことを示している場合、ビルド プロセスは最上位モデル コードの再生成を省略します。
最上位モデル コードが再生成されたかどうかに関わりなく、ビルド プロセスは続けて関数
やコード生成後のコマンドを含むビルド プロセス フックを呼び出します。次のメカニズムにより、関数 STF
_make_rtw_hook
のコード再生成に関連するアクションを実行できます。STF
_make_rtw_hook
強制的にコードを再生成するには、
'entry'
フックから次の関数呼び出しを使用します。rtw.targetNeedsCodeGen('set', true);
'before_tlc'
から'exit'
までのフックでは、フックに渡されるbuildOpts
構造体には論理値のフィールドcodeWasUpToDate
があります。このフィールドは、モデル コードが最新の状態であったために再生成されなかった場合にtrue
にセットされます。コードが最新の状態ではなく再生成が必要だった場合には、false
になります。このフィールドの値に基づいてフック処理をカスタマイズできます。以下に例を示します。... case 'before_tlc' if buildOpts.codeWasUpToDate %Perform hook actions for up to date model else %Perform hook actions for full code generation end ...
ビルド プロセス用に STF_make_rtw_hook.m を使用
ビルド プロセス用にカスタムの
フック ファイルを作成するには、STF
_make_rtw_hook
(開く) フォルダーに配置されている例ファイル matlabroot
/toolbox/coder/embeddedcoderert_make_rtw_hook.m
を以下のようにコピーして編集します。
ert_make_rtw_hook.m
を MATLAB パスのフォルダーにコピーします。STF_make_rtw_hook ファイルの使用に関する規則で説明する命名規則に従ってその名前を変更します。たとえば、GRT ターゲットgrt.tlc
でそれを使用する場合は、その名前をgrt_make_rtw_hook.m
に変更します。ファイル内で関数
ert_make_rtw_hook
の名前を変更して、ファイル名と一致させます。switch hookMethod
ステートメント内のケース ステートメントにコードを追加することにより、必要なフックを実装します。
フック メソッド after_tlc
after_tlc
フック メソッドは、下位互換性のためにのみ提供されています。
after_tlc
段階の生成コードの形式は最終的な形式ではありません。