Main Content

ビルド中のライブラリの位置および名前付けの制御

プリコンパイル済みのライブラリ、プリコンパイルされていないライブラリ、およびモデル参照ライブラリを生成する場合、コンフィギュレーション パラメーターを使用してライブラリの位置とライブラリ名を制御できます。これらのパラメーターは、モデルのビルド中に生成された makefile の値を制御します。

  • ツールチェーン アプローチを使用するビルド プロセスの場合、TargetPreCompLibLocation コンフィギュレーション パラメーターを使用して生成されたライブラリの位置を制御します。

  • テンプレート makefile アプローチを使用するビルド プロセスで、TargetPreCompLibLocation コンフィギュレーション パラメーターを使用して生成されたライブラリ名を制御し、TargetLibSuffix コンフィギュレーション パラメーターを使用して生成されたライブラリ名を制御します。

ライブラリ制御パラメーター

ライブラリ制御パラメーターを使用して、次を行います。

  • ブロックセット ライブラリや Simulink® Coder™ ブロック ライブラリなどのプリコンパイル済みライブラリの位置を指定します。一般的に、ターゲットはこれらのライブラリのバージョンをクロスコンパイルし、ターゲット固有のフォルダーに置きます。

  • ライブラリ ファイル名に適用される接尾辞を制御します (たとえば、_target.a または _target.lib)。

ターゲットはシステム ターゲット ファイル (STF) 内のパラメーターを選択コールバックに設定することができます。以下に例を示します。

function mytarget_select_callback_handler(varargin)
    hDig=varargin{1};
    hSrc=varargin{2};
    slConfigUISetVal(hDig, hSrc, 'TargetPreCompLibLocation',...
    'c:\mytarget\precomplibs');
    slConfigUISetVal(hDig, hSrc, 'TargetLibSuffix',...
    '_target.library');

TMF は対応する拡張トークンをもっています。

    |>EXPAND_LIBRARY_LOCATION<|
    |>EXPAND_LIBRARY_SUFFIX<|

代わりに、関数 set_param への呼び出しを使用することもできます。以下に例を示します。

set_param(model,'TargetPreCompLibLocation',...
'c:\mytarget\precomplibs');

メモ

モデルが参照モデルを含んでいる場合は、make オプション USE_MDLREF_LIBPATHS を使用して、参照モデルの使用するライブラリをビルド フォルダーにコピーするかどうかを制御することができます。詳細については、モデル参照ライブラリの位置を参照してください。

ツールチェーン アプローチのライブラリ ファイル タイプの特定

モデル ビルドのツールチェーン アプローチは、ライブラリ ファイル名 suffix および extension を選択するのに TargetLibSuffix コンフィギュレーション パラメーターの値は使用しません。

ツールチェーン アプローチでは、最終バイナリ名はツールチェーン定義のビルド ツールの説明で提供される modelnamecompilername および extension で構成されます。

model_compilername.extension

ツールチェーン定義のビルド ツールの説明からスタティック ライブラリ ファイル名の拡張子を識別できます。既定のツールチェーンのこの情報を入手するには、次の手順に従います。

  1. 既定のツールチェーン名を取得します。たとえば、次のコマンドを入力します。

    tc_name = coder.make.getDefaultToolchain()
  2. 既定のツールチェーン ハンドルを取得します。たとえば、次のコマンドを入力します。

    tc = coder.make.getToolchainInfoFromRegistry(tc_name)
  3. ツールチェーン オブジェクトへのハンドルを取得します。たとえば、次のコマンドを入力します。

    tool_archiver = tc.getBuildTool('Archiver');
  4. 拡張子を取得します。たとえば、次のコマンドを入力します。

    ext_archiver = tool_archiver.getFileExtension('Static Library');

メモ

TargetLibSuffix パラメーターを設定しない場合、テンプレート makefile およびツールチェーン アプローチは同じスタティック ライブラリ ファイル名 extension を生成します。

プリコンパイル済みのライブラリの位置を指定

TargetPreCompLibLocation コンフィギュレーション パラメーターを使用して以下を実行します。

ブロックセット ライブラリや Simulink Coder ブロック ライブラリなどのプリコンパイル済みのライブラリの場合、rtwmakecfg.m 内で指定される位置は一般的にブロックセットや Simulink Coder 製品に固有の位置です。コード ジェネレーターは、この場所にライブラリが存在することを前提にして、ビルド中にライブラリをリンクします。

カスタムのターゲットなどのアプリケーションによっては、rtwmakecfg.m 内で指定される位置ではなく、ターゲット固有か他の代わりの位置にプリコンパイル済みのライブラリを置くほうがいい場合があります。カスタム ターゲットの場合、コード ジェネレーターでは、ターゲット固有のクロスコンパイラでライブラリが作成され、そのライブラリがターゲット固有の場所に配置される必要があります。ターゲットでサポートされるライブラリは、ビルド プロセス中に使用できるように、ターゲット固有の位置にコンパイルして配置します。

その選択コールバック内で TargetPreCompLibLocation パラメーターを設定することができます。パラメーター用に指定するパスはライブラリの場所に対する完全修飾の絶対パスでなければなりません。相対パスはサポートされません。以下に例を示します。

slConfigUISetVal(hDlg, hSrc, 'TargetPreCompLibLocation',...
'c:\mytarget\precomplibs');

代わりに、関数 set_param を呼び出してパラメーターを設定することもできます。以下に例を示します。

set_param(model,'TargetPreCompLibLocation',...
'c:\mytarget\precomplibs');

makefile 生成中に、ビルド プロセスはトークンを rtwmakecfg.m ファイルからの場所で置き換えます。たとえば、rtwmakecfg.m ファイルのライブラリ名が 'rtwlib' の場合、テンプレート makefile ビルド アプローチはトークンを以下から拡張します。

LIBS += |>EXPAND_LIBRARY_LOCATION<|\|>EXPAND_LIBRARY_NAME<|\
_target.library

これを次のように変更します。

LIBS += c:\mytarget\precomplibs\rtwlib_target.library

既定の設定では、TargetPreCompLibLocation は空の文字ベクトルです。ビルド プロセスは、トークンを置換するために rtwmakecfg.m の場所を使用します。

モデル参照ライブラリの位置

ビルド プロセスは ../slprj/grt/sub/sub_rtwlib.lib のようなパスを MODELREF_LINK_LIBS に割り当てます。ビルド プロセスはリンク時にそのパスを使用してライブラリ ファイルへのアクセスを取得します。

接尾辞をライブラリ ファイル名に制御

モデル ビルドのテンプレート makefile アプローチで、TargetLibSuffix コンフィギュレーション パラメーターを使用して、ライブラリ名に適用される接尾辞を制御します (たとえば、_target.lib_target.a)。指定の接尾辞スキームはピリオド (.) を含まなければなりません。TargetLibSuffix を以下のライブラリに適用することができます。

  • rtwmakecfg.m API 内で指定されるようなターゲットが依存するライブラリ。TargetLibSuffix を使用して、rtwmakecfg API から設定されるプリコンパイル済みライブラリとプリコンパイルされていないライブラリの接尾辞を変更することができます。詳細については、生成された makefile を rtwmakecfg.m API を使用してカスタマイズを参照してください。

    この例では、ターゲットはその選択コールバック内でパラメーターを設定することができます。以下に例を示します。

    slConfigUISetVal(hDlg, hSrc, 'TargetLibSuffix',...
    '_target.library');

    代わりに、関数 set_param への呼び出しを使用することもできます。以下に例を示します。

    set_param(model,'TargetLibSuffix','_target.library');

    TMF から makefile への変換中に、ビルド プロセスはトークン |>EXPAND_LIBRARY_SUFFIX<| を指定の接尾辞に置き換えます。rtwmakecfg.m 内で指定されるライブラリ名が 'rtwlib' である場合は、TMF はそれを以下のように拡張します。

    LIBS += |>EXPAND_LIBRARY_LOCATION<|\|>EXPAND_LIBRARY_NAME<|\
    |>EXPAND_LIBRARY_SUFFIX<|

    これを次のように変更します。

    LIBS += c:\mytarget\precomplibs\rtwlib_target.library

    既定の設定では、TargetLibSuffix は空の文字ベクトルに設定されています。この例では、ビルド プロセスはトークン |>EXPAND_LIBRARY_SUFFIX<| を空の文字ベクトルに置き換えます。

  • モデル参照を使用して作成されたモデル ライブラリ。これらの例では、関連 makefile 変数は |>EXPAND_LIBRARY_SUFFIX<| トークンを必要としません。代わりに、ビルド プロセスは暗黙的に TargetLibSuffix を含みます。たとえば、refmodel1refmodel2 という名前の参照モデルをもつ topmodel という名前の最上位モデルの場合、最上位モデルの TMF は以下から拡張されます。

    MODELLIB           = |>MODELLIB<|
    MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|

    これを次のように変更します。

    MODELLIB           = topmodellib_target.library
    MODELREF_LINK_LIBS = \
    refmodel1_rtwlib_target.library refmodel2_rtwlib_target.library

    既定の設定では、TargetLibSuffix パラメーターは空の文字ベクトルです。この例では、ビルド プロセスは、Windows® ホスト上の .lib と UNIX® ホスト上の .a のファイル拡張子を使用して、これらの 3 つのトークン用の既定の接尾辞を選択します。モデル参照ライブラリの場合は、既定の接尾辞は _rtwlib も含みます。たとえば、Windows ホスト上では、拡張された makefile 値は以下のようになります。

    MODELLIB           = topmodellib.lib
    MODELREF_LINK_LIBS = refmodel1_rtwlib.lib refmodel2_rtwlib.lib