Main Content

codegen コマンドの等価な MATLAB Coder プロジェクトへの変換

codegen コマンドを -toproject オプション付きで使用すると、codegen コマンドを等価な MATLAB® Coder™ プロジェクト ファイルに変換できます。その後、codegen コマンドをもう一度使用するか MATLAB Coder アプリを使用して、プロジェクト ファイルからコードを生成することができます。

たとえば、入力引数 input_arguments をもつ codegen コマンドを、プロジェクト ファイル myProject.prj に変換するには、以下を実行します。

codegen input_arguments -toproject myProject.prj

codegen の入力引数には以下を含みます。

  • エントリポイント関数の名前

  • -args オプションを使用して指定された入力型の定義

  • 構成オブジェクトで指定されたパラメーターを含む、コード生成オプション

  • 生成されるコードに含めるカスタム ソース ファイルの名前

-toproject オプションを使用して、不完全な codegen コマンドをプロジェクト ファイルに変換することもできます。たとえば、構成オブジェクト cfg に格納されているコード生成パラメーターのみが含まれるプロジェクト ファイル myProjectTemplate.prj を作成するには、次を実行します。

codegen -config cfg -toproject myProjectTemplate.prj
myProjectTemplate.prj には、エントリポイント関数や入力型の指定が含まれません。そのため、このプロジェクト ファイルからコードを生成することはできません。MATLAB Coder アプリで myProjectTemplate.prj を開いて、コード生成に使用できる完全なプロジェクト ファイルを作成するためのテンプレートとして使用できます。

メモ

codegen コマンドを -toproject 付きで実行すると、コードは生成されません。プロジェクト ファイルが作成されるだけです。

例: 完全な codegen コマンドのプロジェクト ファイルへの変換

2 つの値の合計を返す MATLAB 関数 myadd を定義します。

function y = myadd(u,v) %#codegen
y = u + v;
end

スタティック ライブラリを生成するための coder.CodeConfig オブジェクトを作成します。TargetLang'C++' に設定します。

cfg = coder.config('lib');
cfg.TargetLang = 'C++';

MATLAB コマンド ラインで、codegen コマンドを作成し、実行します。エントリポイント関数として myadd を指定します。myadd への入力を、次元が無制限の double 型可変サイズ行列として指定します。コード構成オブジェクトとして cfg を指定します。codegen コマンドを myadd_project.prj という名前をもつ等価の MATLAB Coder プロジェクト ファイルに変換するために、-toproject オプションを含めます。

codegen -config cfg myadd -args {coder.typeof(1,[Inf,Inf]),coder.typeof(1,[Inf,Inf])} -toproject myadd_project.prj
Project file 'myadd_project.prj' was successfully created.
Open Project

コード ジェネレーターによってプロジェクト ファイル myadd_project.prj が現在の作業フォルダーに作成されます。-toproject オプションを指定して codegen を実行しても、コードは生成されません。プロジェクト ファイルが作成されるだけです。

もう一度 codegen コマンドを使用して、myadd_project.prj からコードを生成します。

codegen myadd_project.prj

コード ジェネレーターによって C++ スタティック ライブラリ関数 myaddwork\codegen\lib\myadd フォルダーに作成されます。ここで、work が現在の作業ディレクトリです。

例: 不完全な codegen コマンドのテンプレート プロジェクト ファイルへの変換

スタティック ライブラリを生成するための coder.CodeConfig オブジェクトを作成します。TargetLang'C++' に設定します。

cfg = coder.config('lib');
cfg.TargetLang = 'C++';

MATLAB コマンド ラインで、codegen コマンドを作成し、実行します。コード構成オブジェクトとして cfg を指定します。codegen コマンドを myProjectTemplate.prj という名前をもつ等価の MATLAB Coder プロジェクト ファイルに変換するために、-toproject オプションを含めます。

codegen -config cfg -toproject myProjectTemplate.prj
Project file 'myProjectTemplate.prj' was successfully created.
Open Project

これで、MATLAB Coder アプリで myProjectTemplate.prj を開いて、コード生成に使用できる完全なプロジェクト ファイルを作成するためのテンプレートとして使用できるようになりました。

制限

codegen コマンドを -toproject オプション付きで使用するとき、次の制限事項が適用されます。

  • coder.EmbeddedCodeConfig オブジェクトの CodeTemplate パラメーターのプロジェクト ファイルへのエクスポートはサポートされていません。

  • MEX 関数を生成するための codegen コマンドにおいて、fi (Fixed-Point Designer) オブジェクト obj である定数入力を定義するために coder.Constant が使用されていると仮定します。

    特定の fi オブジェクト プロパティが他のプロパティによって有効化されています。fi オブジェクトを作成するとき、これらのプロパティは明示的に変更しない限り、それぞれの既定値に設定されます。obj で、有効化されていない 1 つ以上のプロパティを既定以外の値に設定します。Set fi Object Properties (Fixed-Point Designer)を参照してください。

    -toproject オプションを使用して、この codegen コマンドをプロジェクト ファイルに変換します。プロジェクト ファイルをビルドし、MEX 関数を生成します。生成される MEX 関数に obj を定数入力引数として渡し、MEX を実行すると、MEX はエラーをスローすることがあります。

    この問題を解決するには、有効化されていない obj のプロパティを、MEX 関数に渡す前に、それぞれの既定値に設定しなければなりません。これを行うには、新しい fi オブジェクト obj_new を定義します。

    a = mat2str(obj);
    obj_new = eval(a);

    obj_new を生成される MEX 関数に定数入力として渡します。

参考

関連するトピック