Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

codegen

MATLAB コードから C/C++ コードを生成する

説明

codegen options function は、MATLAB® 関数から C または C++ コードを生成し、生成コードをビルドします。この構文は、次の条件のいずれかが当てはまる場合に適用されます。

  • 関数に入力引数がない。

  • すべての入力引数の型とサイズを指定する 1 つ以上の arguments ブロックが関数に含まれている。

options 引数を使用して、コード生成構成オブジェクトなどの設定を指定します。構成オブジェクトはビルド タイプ (MEX、lib、dll、exe) とコード生成パラメーターを制御します。構成オブジェクトの作成と使用の詳細については、ビルド設定の構成coder.config、および構成オブジェクトのリファレンス ページ (coder.CodeConfigcoder.MexCodeConfigcoder.EmbeddedCodeConfig) を参照してください。

codegen options function -args {func_inputs} は、func_inputs 型の入力を使用して MATLAB 関数から C または C++ コードを生成し、生成コードをビルドします。options 引数を使用して、コード生成構成オブジェクトなどの設定を指定します。構成オブジェクトはビルド タイプ (MEX、lib、dll、exe) とコード生成パラメーターを制御します。構成オブジェクトの作成と使用の詳細については、ビルド設定の構成coder.config、および構成オブジェクトのリファレンス ページ (coder.CodeConfigcoder.MexCodeConfigcoder.EmbeddedCodeConfig) を参照してください。

関数が入力をもたない場合は、関数固有の -args {func_inputs} オプションを省略します。

codegen options files function -args {func_inputs} は、外部 files で指定されたカスタム ソース コードを使用する MATLAB 関数から C/C++ コードを生成します。詳細については、生成コードからのカスタム C/C++ コードの呼び出し外部 C/C++ コードのビルドの構成を参照してください。

codegen options files function -args {func_inputs} -nargout number_args は C/C++ コードを生成し、MATLAB 関数から生成された C/C++ 関数コードの出力引数の数を制御します。ファイルとオプションの引数はオプションです。すべての MATLAB 関数の出力が必ずしも必要であるとは限らない場合、-nargout オプションを使用します。詳細については、生成するエントリポイント関数の入力引数または出力引数の数の指定を参照してください。

codegen options files function1 -args {func1_inputs} ... functionN -args {funcN_inputs} は複数の MATLAB 関数から C/C++ コードを生成します。各関数に対して、関数名の後に個別に入力引数を記述します。各関数に -nargout オプションを使用することもできます。コードを生成する関数は "エントリポイント関数" と呼ばれます。詳細については、複数のエントリポイント関数のためのコード生成を参照してください。

codegen options files function -args {func_inputs1} ... -args {func_inputsN} は、-args で指定した複数の型シグネチャをもつ入力引数を受け入れるコードを生成します。MEX ターゲットの場合、指定したすべてのシグネチャを受け入れる単一の MEX 関数が生成されます。ただし、スタンドアロン ターゲットの場合、C/C++ エントリポイント関数がシグネチャごとに生成されます。options 引数を使用して、コード生成構成オブジェクトやパラメーターなどの設定を指定します。詳細については、複数のシグネチャをもつ関数のコードの生成を参照してください。

codegen projectMATLAB Coder™ プロジェクト ファイル (例: test.prj) からコードを生成します。

すべて折りたたむ

2 つの入力引数 uv の合計を返す MATLAB 関数 mcadd を記述します。arguments ブロックを使用して、u が実数の double 値の 1 行 4 列の行ベクトルであり、v が実数スカラーの double であることを宣言します。

function y = mcadd(u,v) %#codegen
% The directive %#codegen indicates that the function
% is intended for code generation
arguments
    u (1,4) double
    v (1,1) double
end
y = u + v;
end

MATLAB コマンド ラインで、次の codegen コマンドを実行します。

codegen mcadd

コード ジェネレーターにより、MEX ファイル mcadd_mex が現在の作業フォルダーに生成されます。

  • ビルド ターゲットを指定しない場合、コード生成の既定の設定は MEX コード生成です。既定では、コード ジェネレーターは生成された MEX 関数に mcadd_mex という名前を付けます。

  • MEX または C/C++ コードの生成で特定の型を使用するには、MATLAB のエントリポイント関数に対するすべての入力変数の型とサイズを指定しなければなりません。この例では、arguments ブロックを使用して、最初の入力が実数 double 値の 14 列の配列で、2 番目の入力が実数スカラー double であると宣言しています。

コマンド ラインで、生成された MEX 関数 mcadd_mex を呼び出します。mcadd_mex に渡す値の型およびサイズが arguments ブロックで指定した入力プロパティと一致することを確認します。

mcadd_mex([1 1 1 1],5)
ans =

     6     6     6     6

これらの入力値を使用して MATLAB 関数 mcadd を実行すると、同じ出力が生成されます。このテスト ケースでは、mcaddmcadd_mex が同じ動作になることを検証します。

2 つの値の合計を返す MATLAB 関数 mcadd を記述します。

function y = mcadd(u,v) %#codegen
% The directive %#codegen indicates that the function
% is intended for code generation
y = u + v;
end

MATLAB コマンド ラインで、次の codegen コマンドを実行します。

codegen mcadd -args {[0 0 0 0],0}

コード ジェネレーターにより、MEX ファイル mcadd_mex が現在の作業フォルダーに生成されます。

  • ビルド ターゲットを指定しない場合、コード生成の既定の設定は MEX コード生成です。既定では、コード ジェネレーターは生成された MEX 関数に mcadd_mex という名前を付けます。

  • MEX または C/C++ コードの生成で特定の型を使用するには、MATLAB のエントリポイント関数に対するすべての入力変数のプロパティ (クラスおよびサイズ) を指定しなければなりません。この例では、-args オプションを使用して入力の例の値を指定します。コード ジェネレーターは、この例の値を使用して、最初の入力が実数 double 値の 14 列の配列で、2 番目の入力が実数スカラー double であると判別します。

    この入力例の実際の値はコード生成とは関連性がありません。同じプロパティ (クラスおよびサイズ) をもつ他の値のペアを指定しても、同じコードが生成されます。エントリポイント関数の入力のプロパティの指定を参照してください。

コマンド ラインで、生成された MEX 関数 mcadd_mex を呼び出します。mcadd_mex に渡す値のクラスおよびサイズが codegen コマンドで指定した入力プロパティと一致することを確認します。

mcadd_mex([1 1 1 1],5)
ans =

     6     6     6     6

これらの入力値を使用して MATLAB 関数 mcadd を実行すると、同じ出力が生成されます。このテスト ケースでは、mcaddmcadd_mex が同じ動作になることを検証します。

2 つの値の合計を返す MATLAB 関数 myAdd を記述します。

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

MATLAB コマンド ラインで、次の codegen コマンドを実行します。

codegen -config:mex myAdd.m -args {1,2} -args {int8(2),int8(3)} -args {1:10,1:10} -report
コード ジェネレーターにより、codegen コマンドで指定した複数のシグネチャに対して 1 つの MEX 関数 myAdd_mex が作成されます。詳細については、複数のシグネチャをもつ関数のコードの生成を参照してください。

2 つの値の合計を返す MATLAB 関数 mcadd を記述します。

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

-config:lib オプションを使用して、カスタム フォルダー mcaddlib に C ライブラリ ファイルを生成します。1 つ目の入力の型を 16 ビット符号なし整数の 1 行 4 列のベクトルとして指定します。2 番目の入力を倍精度スカラーとして指定します。

codegen -d mcaddlib -config:lib  mcadd -args {zeros(1,4,'uint16'),0}

開区間 (0,1) 上の標準一様分布からランダムなスカラー値を生成する MATLAB 関数 coderRand を記述します。

function r = coderRand() %#codegen
r = rand();

coderRand を呼び出す C の main 関数である c:\myfiles\main.c を記述します。

/*
** main.c
*/
#include <stdio.h>
#include <stdlib.h>
#include "coderRand.h"
#include "coderRand_initialize.h"
#include "coderRand_terminate.h"
int main()
{
    coderRand_initialize();
    printf("coderRand=%g\n", coderRand());
    coderRand_terminate();
    
    puts("Press enter to quit:");
    getchar();

    return 0;
}

コード生成パラメーターを構成して C の main 関数を取り込んだ後、C 実行可能ファイルを生成します。

cfg = coder.config('exe')
cfg.CustomSource = 'main.c'
cfg.CustomInclude = 'c:\myfiles'
codegen -config cfg coderRand

codegen は、現在のフォルダーに C 実行可能ファイル coderRand.exe を生成し、既定のフォルダー codegen\exe\coderRand にサポート ファイルを生成します。

この例では、main 関数を coder.CodeConfig 構成オブジェクトのパラメーターとして指定する方法を説明します。また、main() を含むファイルをコマンド ラインで別途指定することもできます。ソース、オブジェクトまたはライブラリ ファイルを使用できます。

さらに詳しい例については、アプリケーションにおける C の main の例の使用を参照してください。

1 つの入力を取る MATLAB 関数を記述します。

function y = halfValue(vector) %codegen
    y = 0.5 * vector;
end

coder.typeof を使用して、最大サイズが 1 行 16 列で 2 番目の次元が可変サイズの入力の型を double の行ベクトルとして定義します。

vectorType = coder.typeof(1, [1 16], [false true]);

C スタティック ライブラリを生成します。

codegen -config:lib halfValue -args {vectorType}

1 つの入力パラメーター u を受け取り、2 つのグローバル変数 ARB を使用する MATLAB 関数 use_globals を記述します。

function y = use_globals(u)
%#codegen
% Turn off inlining to make 
% generated code easier to read
coder.inline('never');
global AR;
global B;
AR(1) = u(1) + B(1);
y = AR * 2;

MEX 関数を生成します。既定で、codegen は、現在のフォルダーに use_globals_mex という名前の MEX 関数を生成します。-globals オプションを使用して、コマンド ラインでグローバル変数のプロパティを指定します。-args オプションを使用して、入力 u を実数、スカラー、double に指定します。

codegen -globals {'AR', ones(4), 'B', [1 2 3 4]} use_globals -args {0}

また、MATLAB ワークスペース内でグローバル データを初期化することもできます。MATLAB プロンプトで、次のように入力します。

global AR B;
AR = ones(4);
B = [1 2 3];

MEX 関数を生成します。

codegen use_globals -args {0}

列挙型データを使用してデバイスの状態を基に LED 表示を有効にする関数 displayState を記述します。オン状態を示すために緑色の LED 表示を点灯します。また、OFF の状態を示すために赤色の LED 表示を点灯します。

function led = displayState(state)
%#codegen

if state == sysMode.ON
    led = LEDcolor.GREEN;
else
    led = LEDcolor.RED;
end

列挙 LEDColor を定義します。MATLAB パス上に、次の要素が含まれる 'LEDColor' という名前のファイルを作成します。

classdef LEDcolor < int32
    enumeration
        GREEN(1),
        RED(2),
    end
end

既存の MATLAB 列挙からの値を使用して、coder.EnumType オブジェクトを作成します。

列挙 sysMode を定義します。MATLAB パス上に、次の要素が含まれる 'sysMode' という名前のファイルを作成します。

classdef sysMode < int32
  enumeration
    OFF(0)
    ON(1)
  end
end

この列挙から、coder.EnumType オブジェクトを作成します。

t = coder.typeof(sysMode.OFF);

displayState の MEX 関数を生成します。

codegen  displayState -args {t}

固定小数点入力の平方根を計算する MATLAB 言語関数 mcsqrtfi を記述します。

function y = mcsqrtfi(x) %#codegen
y = sqrt(x);

固定小数点入力 xnumerictype および fimath プロパティを定義し、-config:lib オプションを使用して mcsqrtfi の C ライブラリ コードを生成します。

T = numerictype('WordLength',32, ...
                'FractionLength',23, ...
                'Signed',true)
F = fimath('SumMode','SpecifyPrecision', ...
           'SumWordLength',32, ...
           'SumFractionLength',23, ...
           'ProductMode','SpecifyPrecision', ...
           'ProductWordLength',32, ...
           'ProductFractionLength',23)
% Define a fixed-point variable with these
%  numerictype and fimath properties
myfiprops = {fi(4.0,T,F)}
codegen -config:lib mcsqrtfi -args myfiprops
codegen は、既定のフォルダー codegen/lib/mcsqrtfi に C ライブラリ ファイルとサポート ファイルを生成します。

半精度入力を受け入れる MATLAB コードのコードを生成できます。詳細については、half を参照してください。

2 つの値の合計を返す MATLAB 関数 foo を記述します。

function y = foo(a,b)
y = a + b;
end

MATLAB コマンド ラインで、次の codegen コマンドを実行します。

codegen -lang:c++ -config:lib foo -args {half(0),half(0)} -report
Code generation successful: View report

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

コード生成レポートを表示するには、View report をクリックします。レポート ビューアーで、ファイル foo.cpp 内の生成された C++ ソース コードを検査します。

real16_T foo(real16_T a, real16_T b)
{
  return a + b;
}

生成された関数 foo は、半精度値を受け入れて返します。C++ 半精度型 real16_T は、生成されたヘッダー ファイル rtwhalf.h で定義されています。クラス real16_T+ 演算子の定義を検査します。

この例の生成されたコードでは、半精度入力は単精度に変換され、単精度で加算演算が実行されて、結果が半精度に戻されます。

この例には Fixed-Point Designer™ が必要です。

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

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

myadd をテストする MATLAB 関数 myadd_test を記述します。

function y = myadd_test %#codegen
    y = myadd(10,20);
end

coder.FixptConfig オブジェクト fixptcfg を既定の設定で作成します。

fixptcfg = coder.config('fixpt');

テスト ベンチの名前を設定します。

fixptcfg.TestBenchName = 'myadd_test';

コード生成構成オブジェクトを作成して、スタンドアロンの C スタティック ライブラリを生成します。

cfg = coder.config('lib');

-float2fixed オプションを使用してコードを生成します。

codegen -float2fixed fixptcfg -config cfg myadd

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 コマンドでは、構成オブジェクトで指定されたオプションよりも個々のコマンド ライン オプションが優先されます。コマンド ライン オプションが競合する場合は、最も右にあるオプションが優先されます。オプションおよびその他の構文要素の順序は相互交換可能です。

以下の 1 つ以上の値として指定します。

-c

ソース コードのみを生成します。make コマンドを呼び出したり、オブジェクト コードをビルドしたりしないでください。たとえば、関数 foo のスタティック C/C++ ライブラリを生成し、ソース コードのみを生成するには、以下のコマンドを使用します。

codegen -config:lib -c foo
このコマンドは MATLAB Coder アプリの既定のビルド タイプ ([ソース コード]) を複製します。

-config:dll

既定の構成パラメーターを使用して、C/C++ ダイナミック ライブラリを生成します。

-config:exe

既定の構成パラメーターを使用して、C/C++ 実行可能ファイルを生成します。

-config:lib

既定の構成パラメーターを使用して、C/C++ スタティック ライブラリを生成します。

-config:mex

既定の構成パラメーターを使用して、MEX 関数を生成します。

-config:single

既定の構成パラメーターを使用して、単精度 MATLAB コードを生成します。

Fixed-Point Designer が必要です。

-config config_object

コード生成パラメーターを含む構成オブジェクトを指定します。config_object は次のいずれか 1 つの構成オブジェクトです。

  • coder.CodeConfig — Embedded Coder® が使用できない場合に、スタンドアロン C/C++ ライブラリまたは実行可能ファイルを生成するパラメーター。

    % Configuration object for a dynamic linked library
    cfg = coder.config('dll')
    % Configuration object for an executable
    cfg = coder.config('exe')
    % Configuration object for a static standalone library
    cfg = coder.config('lib')
    

  • coder.EmbeddedCodeConfig — Embedded Coder が使用可能な場合に、スタンドアロン C/C++ ライブラリまたは実行可能ファイルを生成するパラメーター。

    % Configuration object for a dynamic linked library
    ec_cfg = coder.config('dll')
    % Configuration object for an executable
    ec_cfg = coder.config('exe')
    % Configuration object for a static standalone library
    ec_cfg = coder.config('lib')
    

  • coder.MexCodeConfig — MEX コードを生成するパラメーター。

    mex_cfg = coder.config
    % or 
    mex_cfg = coder.config('mex')

詳細については、ビルド設定の構成を参照してください。

-d out_folder

生成されたファイルを out_folder で指定された絶対パスまたは相対パスに保存します。out_folder に次を含めてはなりません。

  • スペース (スペースを使用すると、オペレーティング システムの構成によっては、コード生成に失敗する可能性があります)。

  • 非 7 ビット ASCII 文字 (日本語など)。

out_folder で指定されたフォルダーが存在しない場合、codegen がそのフォルダーを作成します。

フォルダーの場所を指定しない場合、codegen は既定のフォルダー内にファイルを生成します。

codegen/target/fcn_name. 

target は以下のいずれかです。

  • mex (MEX 関数用)

  • exe (組み込み C/C++ 実行可能ファイル用)

  • lib (組み込み C/C++ ライブラリ用)

  • dll (C/C++ ダイナミック ライブラリ用)

fcn_name は、(アルファベット順で) コマンド ラインの先頭にある MATLAB 関数の名前です。

フォルダー名にはアスタリスク (*)、疑問符 (?)、ドル記号 ($) およびシャープ記号 (#) は使用できません。

メモ

codegen は、同じコードに対して同じタイプの出力を生成するたびに、以前のビルドからファイルを削除します。以前のビルドのファイルを保持する場合は、新しいビルドを開始する前に、保持するファイルを別の場所にコピーしてください。

-double2single double2single_cfg_name

coder.SingleConfig オブジェクト double2single_cfg_name で指定された設定を使用して、単精度 MATLAB コードを生成します。codegencodegen/fcn_name/single フォルダーにファイルを生成します。

fcn_name は、エントリポイント関数の名前です。

-config オプションと共に使用すると、単精度 C/C++ コードも生成します。codegen は単精度ファイルを codegen/target/folder_name フォルダーに生成します。

target は以下のいずれかです。

  • mex (MEX 関数用)

  • exe (組み込み C/C++ 実行可能ファイル用)

  • lib (組み込み C/C++ ライブラリ用)

  • dll (C/C++ ダイナミック ライブラリ用)

folder_namefcn_namesinglesuffix の連結です。

singlesuffixcoder.SingleConfig プロパティ OutputFileNameSuffix が指定する接尾辞です。このフォルダーの単精度ファイルにも接尾辞があります。

詳細については、単精度 MATLAB コードの生成を参照してください。このオプションを使用するには、Fixed-Point Designer を所有していなければなりません。

-float2fixed float2fixed_cfg_name

-config オプションと共に使用すると、浮動小数点から固定小数点への変換の構成オブジェクト float2fixed_cfg_name で指定された設定を使用して、固定小数点の C/C++ コードを生成します。

codegen はファイルを codegen/target/fcn_name_fixpt フォルダーに生成します。target は以下のようになります。

  • mex (MEX 関数用)

  • exe (組み込み C/C++ 実行可能ファイル用)

  • lib (組み込み C/C++ ライブラリ用)

  • dll (C/C++ ダイナミック ライブラリ用)

fcn_name は、エントリポイント関数の名前です。

-config オプションを指定せずに使用すると、浮動小数点から固定小数点への変換の構成オブジェクト float2fixed_cfg_name で指定された設定を使用して、固定小数点の MATLAB コードを生成します。codegen はファイルを codegen/fcn_name/fixpt フォルダーに生成します。

float2fixed_cfg_nameTestBenchName プロパティを設定しなければなりません。たとえば、次のようにします。

fixptcfg.TestBenchName = 'myadd_test';
このコマンドは、myadd_test が浮動小数点から固定小数点に変換する構成オブジェクト fixptcfg のテスト ファイルであることを指定します。

詳細については、MATLAB コードの固定小数点 C コードへの変換を参照してください。このオプションを使用するには、Fixed-Point Designer を所有していなければなりません。

-g

C コンパイラでデバッグ オプションを使用するかどうかを指定します。デバッグ モードを有効にすると、C コンパイラで一部の最適化が無効になります。コンパイルは速くなりますが、実行は遅くなります。

-globals global_values

グローバル変数の名前と初期値は MATLAB ファイルで指定します。

global_values はグローバル変数の名前と初期値の cell 配列です。global_values の形式は次のとおりです。

{g1, init1, g2, init2, ..., gn, initn}

gn は文字ベクトルとして指定されるグローバル変数の名前です。initn は初期値です。以下に例を示します。

-globals {'g', 5}

あるいは、次の形式を使用します。

-globals {global_var, {type, initial_value}}

type は型オブジェクトです。型オブジェクトを作成するには、coder.typeof を使用します。グローバル変数の cell 配列の場合、この形式を使用しなければなりません。

codegen でコードを生成する前に、グローバル変数を初期化します。-globals オプションを使用してグローバル変数に初期値を提供しない場合、codegen は MATLAB グローバル ワークスペース内の変数をチェックします。初期値を指定しないと codegen はエラーを生成します。

MATLAB Coder と MATLAB は、それぞれ独自のグローバル データのコピーをもちます。これらの 2 つが情報をやり取りするときは、それぞれのグローバル データを同期して一貫性を保持します。データを同期しないと、グローバル変数は異なるものになる場合があります。

グローバル変数の定数値を指定するには、coder.Constant を使用します。以下に例を示します。

-globals {'g', coder.Constant(v)}
これは g が定数値 v をもつグローバル変数であることを指定します。

詳細については、グローバル データのためのコード生成を参照してください。

-gpuprofile

GPU パフォーマンス アナライザーを使用して、生成されたコードの GPU プロファイリングを有効にします。

GPU パフォーマンス アナライザーは、MEX 関数または生成されたコード内の CPU および GPU アクティビティに関するメトリクスを収集するソフトウェアインザループ (SIL) を実行します。GPU パフォーマンス アナライザーは、生成された CUDA® コードのパフォーマンスのボトルネックを可視化、特定、および軽減するために使用できる時系列順のタイムライン プロットを含むレポートを提供します。

単一のコマンドで CUDA コードを生成およびプロファイルするには、-gpuprofile オプションと -test オプションの両方を指定して codegen を実行します。

GPU プロファイリングには、GPU Coder™ 製品が必要です。MEX 以外のターゲットをプロファイルするには、Embedded Coder 製品も必要です。

詳細については、GPU パフォーマンス アナライザー (GPU Coder)を参照してください。

-I include_path

include_path をコード生成パスの先頭に追加します。codegen が MATLAB 関数およびカスタムの C/C++ ファイルを探すときは、最初にコード生成パスを検索します。クラスについては、コード生成パスを検索しません。クラスは MATLAB の検索パス上になければなりません。詳細については、パスとファイル構造の設定を参照してください。

パスに非 7 ビット ASCII 文字 (日本語など) が含まれている場合、codegen はこのパス上でファイルを検出できない場合があります。

複数のパスを含めるには、含める各パスの前に -I を使用します。スペースを含むパスは一重引用符で囲みます。次に例を示します。

-I C:\Project -I 'C:\Custom Files'
-jit

MEX 関数の生成には Just-In-Time (JIT) コンパイルを使用します。JIT コンパイルは MEX 関数の生成を高速化できます。このオプションは MEX 関数の生成に対してのみ適用されます。このオプションは、カスタム コードや OpenMP ライブラリの使用など、特定のコード生成機能やオプションと互換性がありません。

-lang:c

生成コードで使用する言語を C として指定します。

ターゲット言語を指定しない場合、コード ジェネレーターは C コードを生成します。

-lang:c++

生成コードで使用する言語を C++ として指定します。

-launchreport

コード生成レポートを生成して開きます。このオプションを指定しない場合、codegen は、エラー メッセージまたは警告メッセージの発生時、あるいは -report オプションが指定されているときに限り、レポートを生成します。

-o output_file_name

基本名 output_file_name と以下の拡張子をもつ MEX 関数、C/C++ ライブラリまたは C/C++ 実行可能ファイルを生成します。

  • .a または .lib (C/C++ スタティック ライブラリの場合)

  • .exe または拡張子なし (C/C++ 実行可能ファイルの場合)

  • .dll (Microsoft® Windows® システムの C/C++ ダイナミック ライブラリの場合)

  • .so (Linux® システムの C/C++ ダイナミック ライブラリの場合)

  • .dylib (Mac システムの C/C++ ダイナミック ライブラリの場合)

  • 生成された MEX 関数用のプラットフォーム依存の拡張子

output_file_name は、ファイル名にすることも、既存のパスを含めることもできます。output_file_name にはスペースを使用しないでください。スペースを使用すると、オペレーティング システムの構成によっては、コード生成時にエラーが発生する可能性があります。

MEX 関数の場合、output_file_name は有効な MATLAB 関数名でなければなりません。

ライブラリと実行可能ファイルの出力ファイル名を指定しない場合、基本名は fcn_1 になります。fcn_1 は、コマンド ラインで最初に指定されている MATLAB 関数の名前です。MEX 関数の場合、基本名は fcn_1_mex になります。元の MATLAB 関数と MEX 関数を実行して結果を比較できます。

-O optimization_option

optimization_option の値に基づいて、生成されたコードを最適化します。

  • enable:inline — 関数インライン化を有効にします。

  • disable:inline — 関数インライン化を無効にします。関数インライン化の詳細については、生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御を参照してください。

  • enable:openmp — 使用可能な場合は OpenMP ライブラリを使用します。OpenMP ライブラリを使用すると、parfor ループ用に codegen が生成する MEX 関数または C/C++ コードを、複数のスレッドで実行できます。

  • disable:openmp — OpenMP ライブラリを無効にします。OpenMP を無効にすると、codegenparfor ループを for ループとして処理し、単一のスレッドで実行される MEX 関数または C/C++ コードを生成します。parfor ループのコンパイルの制御を参照してください。

最適化を行うたびにコマンド ラインで -O を 1 回ずつ指定します。

これを指定しない場合、codegen はインライン化と OpenMP を使用して最適化します。

-package zip_file_name

生成されたスタンドアロン コードとその依存関係を、zip_file_name という名前の ZIP 圧縮ファイルにパッケージ化します。その後、この ZIP ファイルを使用して、コード ファイルを他の開発環境に移動、解凍、およびリビルドできます。

このパッケージ化機能は、関数 packNGo でも提供されます。

-preservearraydims

N 次元インデックスを使用するコードを生成します。詳細については、N 次元インデックスを使用するコードの生成を参照してください。

-profile

MATLAB プロファイラーを使用して、生成された MEX 関数のプロファイリングを有効にします。詳細については、MATLAB プロファイラーを使用した MEX 関数のプロファイリングを参照してください。

このオプションは、GPU Coder を使用した CUDA コード生成ではサポートされていません。生成された CUDA コードをプロファイルするには、-gpuprofile オプションを使用します。

-report

コード生成レポートを作成します。このオプションを指定しない場合、codegen は、エラー メッセージまたは警告メッセージの発生時、あるいは -launchreport オプションが指定されているときに限り、レポートを生成します。

Embedded Coder がある場合、このオプションによりコード置換レポートの作成も有効になります。

-reportinfo info

コード生成に関する情報をベースの MATLAB ワークスペースの変数 info にエクスポートします。コード生成レポートの情報へのプログラムによるアクセスを参照してください。

-rowmajor

行優先の配列レイアウトを使用するコードを生成します。列優先のレイアウトが既定です。詳細については、行優先の配列レイアウトを使用するコードの生成を参照してください。

-silent

コード生成が警告なしで正常に実行された場合に、レポートの生成時も含め、すべてのメッセージを非表示にします。

警告およびエラー メッセージは表示されます。

-singleC

単精度 C/C++ コードを生成します。詳細については、コマンド ラインでの単精度の C コードの生成を参照してください。

このオプションを使用するには、Fixed-Point Designer を所有していなければなりません。

-std:c89/c90

生成されたコードに C89/90 (ANSI) 言語標準を使用します。

-std:c99

生成されたコードに C99 (ISO) 言語標準を使用します。

-std:c++03

生成されたコードに C++03 (ISO) 言語標準を使用します。このライブラリは、C++ コードを生成する場合にのみ使用できます。

-std:c++11

生成されたコードに C++11 (ISO) 言語標準を使用します。このライブラリは、C++ コードを生成する場合にのみ使用できます。

-test test_file

元の MATLAB 関数の呼び出しを MEX 関数の呼び出しに置き換えて test_file を実行します。このオプションの使用と coder.runTest の実行は同じです。

このオプションは MEX 関数を生成する場合、または VerificationMode'SIL' または 'PIL' に設定した構成オブジェクトを使用する場合にのみサポートされます。VerificationMode パラメーターをもつ構成オブジェクトを作成するには、Embedded Coder 製品が必要です。

-toproject project_file_name

codegen コマンドを project_file_name という名前の等価の MATLAB Coder プロジェクト ファイルに変換します。その後、codegen コマンドをもう一度使用するか MATLAB Coder アプリを使用して、プロジェクト ファイルからコードを生成することができます。

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

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

-toproject project_file_name オプションを指定して codegen を実行しても、コードは生成されません。プロジェクト ファイルが作成されるだけです。

codegen コマンドの等価な MATLAB Coder プロジェクトへの変換を参照してください。

-v

詳細モードを有効にして、コード生成のステータスとターゲットのビルド ログ メッセージを表示します。

-?

codegen コマンドのヘルプを表示します。

現在の作業フォルダーまたはパス上に存在する関数として指定します。MATLAB ファイルが非 7 ビット ASCII 文字 (日本語など) を含むパス上や + で開始する名前空間の名前内にある場合、codegen コマンドでファイルが検出されない可能性があります。

例: codegen myAddFunction

前述の MATLAB 関数の入力のサイズ、クラス、および実数/複素数を定義するサンプル値。cell 配列における入力の位置は、MATLAB 関数定義における入力引数の位置に対応していなければなりません。あるいは、サンプル値の代わりに、coder.Type オブジェクトを指定できます。coder.Type オブジェクトを作成するには、coder.typeof を使用します。

関数定義よりも入力引数が少ない関数を生成するには、適用しない引数に対するサンプル値を省略します。

詳細については、エントリポイント関数の入力のプロパティの指定を参照してください。

例: codegen foo -args {1}

例: codegen foo2 -args {1, ones(3,5)}

例: codegen foo3 -args {1, ones(3,5), coder.typeof("hello")}

生成されるコードに取り込むカスタム ファイルを指定するスペース区切りのリスト。オプション、外部ファイル、および関数指定の順序は相互交換可能です。以下の種類のファイルを取り込むことができます。

  • C ファイル (.c)

  • C++ ファイル (.cpp)

  • ヘッダー ファイル (.h)

  • オブジェクト ファイル (.o または .obj)

  • ライブラリ (.a.so.dylib または .lib)

  • テンプレート makefile (.tmf)

    メモ

    テンプレート makefile (TMF) に対するサポートは将来のリリースで削除される予定です。生成コードのビルドには、代わりにツールチェーン アプローチを使用してください。

これらのファイルが非 7 ビット ASCII 文字 (日本語など) を含むパス上にある場合、codegen コマンドでファイルが検出されない可能性があります。

例: codegen foo myLib.lib

前述の MATLAB 関数用に生成された C/C++ エントリポイント関数における出力引数の数。コード ジェネレーターは指定した数の出力引数を MATLAB 関数定義での発生順に生成します。

例: codegen myMLfnWithThreeOuts -nargout 2

MATLAB Coder アプリで作成されたプロジェクト ファイル。コード ジェネレーターは、このプロジェクト ファイルを使用して、エントリポイント関数、入力の型の定義、およびその他のオプションを設定します。アプリを開いてプロジェクト ファイルの作成や変更を行うには、関数 coder を使用します。

例: codegen foo.prj

制限

  • MATLAB スクリプトに対するコードは生成できません。コードを生成するには、スクリプトを関数として書き直します。

  • 現在のフォルダーが private フォルダーまたは @ フォルダーである場合、これらのフォルダーは MATLAB で特別な意味をもつため、コードの生成はサポートされません。@ フォルダー内のメソッドおよび private フォルダー内の関数を呼び出すコードは生成できます。

ヒント

  • 既定では、コードはフォルダー codegen/target/function に生成されます。MEX 関数と実行可能ファイルは現在の作業フォルダーにコピーされます。

  • コード生成プロセスを簡略化するために、コード生成コマンドを個別のスクリプトに記述できます。スクリプトで、関数の入力の型とコード生成オプションを定義します。コードを生成するには、このスクリプトを呼び出します。

  • codegen は、同じコードまたはプロジェクトに対して同じタイプの出力を生成するたびに、以前のビルドからファイルを削除します。以前のビルドのファイルを保持する場合は、新しいビルドを開始する前に、そのファイルを別の場所にコピーしてください。

  • 関数 coder を使用して MATLAB Coder アプリを開き、MATLAB Coder プロジェクトを作成します。このアプリは、MATLAB ファイルの追加、入力パラメーターの定義およびビルド パラメーターの指定を行うためのユーザー インターフェイスを提供します。

  • 関数構文を使用して codegen を呼び出すことができます。codegen 引数を文字ベクトルまたは string スカラーとして指定します。以下に例を示します。

    codegen('myfunction','-args',{2 3},'-report')
    
  • string スカラーを入力として指定するには、または codegen の引数を string スカラーとして指定するには、関数構文を使用します。次に例を示します。

    codegen('myfunction','-args',"mystring",'-report')
    codegen("myfunction","-args","mystring","-report")
    

    string スカラー入力をコマンド形式の codegen に指定することで、予期しない結果が生じる可能性があります。コマンド構文または関数構文の選択を参照してください。

  • プログラミングによる codegen 呼び出しを実行するには、関数構文を使用します。以下に例を示します。

    A = {'myfunction','-args',{2 3}};
    codegen(A{:})
    

バージョン履歴

R2011a で導入