メインコンテンツ

codegen

MATLAB コードから C または C++ コードを生成する

説明

codegen fun は、既定のコード生成設定を使用して、MATLAB® 関数 fun に対する C の MEX 関数を生成します。この構文は、fun が入力引数を受け取らない場合、または arguments ブロックや assert ステートメントを使用して MATLAB 関数の本体で入力引数を定義している場合に使用します。

codegen options fun は、options 引数を使用して指定したコード生成設定を使用して、MATLAB 関数 fun に対する C または C++ コードを生成します。たとえば、options 引数を使用して、生成コードの言語 (C または C++) や出力タイプ (スタティック ライブラリ、ダイナミック ライブラリ、実行可能ファイル、または MEX 関数) を指定します。この構文は、fun が入力引数を受け取らない場合、または arguments ブロックや assert ステートメントを使用して MATLAB 関数の本体で入力引数を定義している場合に使用します。

codegen options fun -args inputs は、options 引数で指定したコード生成設定を使用して、MATLAB 関数 fun に対する C/C++ コードを生成します。inputs 引数を使用して、入力の型を指定します。

codegen options fun -args inputs -nargout numOut は、指定したコード生成設定、入力引数、および出力引数の数 numOut を使用して、MATLAB 関数 fun に対する C/C++ コードを生成します。すべての MATLAB 関数の出力に対してはコードを生成しない場合は、この構文を使用します。funvarargout を使用している場合は、-nargout numOut を指定しなければなりません。

codegen options advSyntax は、複数のシグネチャおよびサポート ファイルを指定して複数のエントリポイント関数の C/C++ コードを生成します。この構文は、MATLAB Coder™ プロジェクトのコードを生成するために使用することもできます。

すべて折りたたむ

MATLAB 関数 helloWorld を確認します。この関数は入力引数を取らず、1 から 100 までのランダムな整数を出力します。関数宣言の後の %#codegen 命令は、コード生成に固有の警告やエラーを特定するように MATLAB コード アナライザーに指示します。

function out = helloWorld %#codegen
out = randi(100);
end

helloWorld MATLAB 関数の C MEX 関数を生成します。codegen コマンドは、既定では C MEX 関数を生成します。

codegen helloWorld
Code generation successful.

コマンド ラインで、生成された MEX 関数を実行します。この関数は 1 から 100 までのランダムな数値を生成します。

helloWorld_mex
ans =

    91

2 つの値の合計を返す MATLAB 関数 myaddarg を確認します。関数宣言の後の %#codegen 命令は、コード生成に固有の警告やエラーを特定するように MATLAB コード アナライザーに指示します。この関数は arguments ブロックを使用して、u が実数 double 値の 1 行 4 列の行ベクトルであり、v が実数のスカラーの double であることを宣言します。

function y = myaddarg(u,v) %#codegen
arguments
    u (1,4) double
    v (1,1) double
end
y = u + v;
end

myaddarg 関数に対するスタンドアロンの C++ スタティック ライブラリを生成します。-config:lib オプションを使用してスタティック ライブラリを指定し、lang:c++ オプションを使用して C++ を指定します。コード ジェネレーターは、C++ ソース コード、ライブラリ、オブジェクト、およびヘッダー ファイルを codegen/lib/myaddarg フォルダー内に生成します。

codegen -config:lib -lang:c++ myaddarg
Code generation successful.

2 つの値の合計を返す MATLAB 関数 myadd を確認します。関数宣言の後の %#codegen 命令は、コード生成に固有の警告やエラーを特定するように MATLAB コード アナライザーに指示します。

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

MATLAB コマンド ラインで codgen コマンドを呼び出します。-config:lib オプションを使用してスタティック ライブラリを生成します。既定ではコード ジェネレーターは C コードを作成します。-args を使用して、ともにスカラーの double である 2 つの入力引数を myadd 関数が取ることを指定します。コマンド ラインにおける入力引数の指定の詳細については、Specify Input Types at the Command Lineを参照してください。

codegen -config:lib myadd -args {0,0}
Code generation successful.

生成された C ファイル内の myadd の定義を確認します。コード ジェネレーターは、このファイルをフォルダー codegen/lib/myadd 内に生成します。

/* Function Definitions */
/*
 * Arguments    : double u
 *                double v
 * Return Type  : double
 */
double myadd(double u, double v)
{
  return u + v;
}

関数 myops を確認します。この関数は 4 つの異なる演算を実行し、1 つから 4 つまでの出力をもつ可能性があります。関数宣言の後の %#codegen 命令は、コード生成に固有の警告やエラーを特定するように MATLAB コード アナライザーに指示します。

function varargout = myops(a,b) %#codegen
varargout{1} = a+b;
varargout{2} = a*b;
varargout{3} = a/b;
varargout{4} = a-b;
end

myops MATLAB 関数の C MEX 関数を生成します。codegen コマンドは、既定では C MEX 関数を生成します。-args を使用して以下のように入力引数を指定します。

  • a が最大長 10 の可変長の行ベクトルであることを指定するために、coder.typeof を使用します。

  • b がスカラーの double であることを指定するために、例の値として 0 を使用します。

コマンド ラインにおける入力引数の指定の詳細については、Specify Input Types at the Command Lineを参照してください。

myopsvarargout を使用しているため、-nargout 引数を含めなければなりません。-nargout 3 を使用して、最初の 3 つの出力変数に対してコードを生成するようにコード ジェネレーターに指示します。生成コード内の入力引数または出力引数の数を制御する方法の詳細については、エントリポイント関数の入力引数または出力引数の数の指定を参照してください。

codegen myops -args {coder.typeof(0,[1 10],[false true]),0} -nargout 3
Code generation successful.

3 つの出力を指定して、コマンド ラインで生成された MEX 関数を実行します。生成された MEX 関数は、出力を正しく生成します。

[x,y,z] = myops_mex(3,4)
x =

     7


y =

    12


z =

    0.7500

4 つの出力を指定して、コマンド ラインで生成された MEX 関数を実行します。生成された MEX 関数はエラーを生成します。

[x,y,z,a] = myops_mex(3,4)
Too many output arguments for entry-point 'myops'.

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

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

MATLAB コマンド ラインで codgen コマンドを呼び出します。-config:lib オプションを使用してスタティック ライブラリを生成し、-lang:c++ オプションを使用して C++ コードを生成します。以下のように myadd の 3 つの入力セットを指定します。

  • -args {0,0} を使用して、2 つのスカラーの double を指定

  • -args {int8(0),int8(0)} を使用して、2 つの 8 ビットの符号付き整数を指定

  • -args {0,coder.typeof(0,[10,10]) を使用して、1 つのスカラーの double と、最大サイズが 10 行 10 列の可変サイズの 1 つの配列を指定

コマンド ラインにおける入力引数の指定の詳細については、Specify Input Types at the Command Lineを参照してください。

codegen -lang:c++ -config:lib myadd -args {0,0} -args {int8(0),int8(0)} -args {0,coder.typeof(0,[10,10])}
Code generation successful.

フォルダー codegen/lib/myadd 内の生成されたヘッダー ファイル myadd.h を確認します。コード ジェネレーターは、3 つの異なる入力セットをもつ 3 つのバージョンの myadd 関数を宣言します。

// Function Declarations
real_T myadd1(real_T u, real_T v);

int8_T myadd2(int8_T u, int8_T v);

void myadd3(real_T u, const real_T v[100], real_T y[100]);
詳細については、複数のシグネチャをもつ関数のコードの生成を参照してください。

ランダムなスカラー値を生成する MATLAB 関数 myrand を確認します。

function r = myrand() %#codegen
r = rand();
end

C の main 関数が含まれているファイル main.c を確認します。C の main 関数は、myrand MATLAB 関数から生成された C 関数を呼び出します。

/* main.c */
#include <stdio.h>
#include <stdlib.h>
#include "myrand.h"
#include "myrand_initialize.h"
#include "myrand_terminate.h"
int main()
{
    myrand_initialize();
    printf("myrand value %g\n", myrand());
    myrand_terminate();
    return 0;
}

MATLAB コマンド ラインで codgen コマンドを呼び出します。-config:exe オプションを使用して実行可能ファイルを生成します。既定ではコード ジェネレーターは C コードを作成します。カスタム ソース コード ファイル main.c を含めるようにコード ジェネレーターに指示します。コード ジェネレーターは、作業フォルダーに C の実行可能ファイルを作成します。

codegen -config:exe myrand main.c

system 関数および ispc 関数を使用して、生成された実行可能ファイルをテストします。実行可能ファイルは、期待どおりの出力を生成します。

if ispc
    system("myrand.exe")
else
    system("./myrand")
end
myrand value 0.814724 

ans =

     0

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

入力引数

すべて折りたたむ

コード生成オプション。オプション値、またはスペースで区切られたオプション値のリストとして指定します。オプション値は任意の順序で入力できます。オプションが競合している場合は、最も右にあるオプションが優先されます。

コード構成オブジェクトの指定

コード構成オブジェクトを指定するには、-config オプションを使用します。このオブジェクトは、単独で使用することも、他のオプション値と組み合わせて使用することもできます。コード生成およびビルド設定の構成を参照してください。コード ジェネレーターは、コード構成オブジェクトを使用して指定したオプションよりも、codegen 関数で指定したオプションを優先します。

オプション値説明
-config configObject

コード生成設定が含まれている構成オブジェクトを指定します。コード構成オブジェクトを作成するには、coder.config 関数を使用します。たとえば、スタティック ライブラリのコード構成オブジェクトを作成するには、次のコマンドを使用します。

cfg = coder.config("lib");
次に、作成したオブジェクトを codegen に渡します。以下に例を示します。
codegen -config cfg foo

生成コードの言語の制御

次の表に、生成コードの言語を制御するオプションを示します。既定では、コード ジェネレーターは C99 (ISO) 言語標準に準拠した C コードを生成します。C++ コードを生成した場合、既定では、コード ジェネレーターは C++11 (ISO) 言語標準に準拠した C++ コードを生成します。

C コードを生成した場合、C++ 言語標準はサポートされません。C++ コードを生成する際に C 言語標準を指定すると、コード ジェネレーターは、選択した C 標準および C++03 言語機能で使用可能な C 数学ライブラリを使用します。サポートされている言語標準の詳細については、コード生成に使用する言語標準の変更を参照してください。

オプション値説明
-lang:c

C コードを生成します。

-lang:c++

C++ コードを生成します。

-std:c89/c90

C89/C90 (ANSI) 言語標準に準拠したコードを生成します。

-std:c99

C99 (ISO) 言語標準に準拠したコードを生成します。この言語標準は、C コードを生成した場合の既定の設定です。

-std:c++03

C++03 (ISO) 言語標準に準拠したコードを生成します。

-std:c++11

C++11 (ISO) 言語標準に準拠したコードを生成します。この言語標準は、C++ コードを生成した場合の既定の設定です。

-std:c++14

C++14 (ISO) 言語標準に準拠したコードを生成します。

-std:c++17

C++17 (ISO) 言語標準に準拠したコードを生成します。

-std:c++20

C++20 (ISO) 言語標準に準拠したコードを生成します。

出力タイプの制御

次の表に、コード ジェネレーターによって生成されるコードのタイプを制御するオプションを示します。既定では、コード ジェネレーターは MEX 関数を生成し、生成されたコードをビルドします。

オプション値説明
-config:dll

C/C++ ダイナミック ライブラリを生成します。

-config:exe

C/C++ 実行可能ファイルを生成します。

-config:lib

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

-config:mex

MEX 関数を生成します。

-c

ソース コードのみを生成します。コード ジェネレーターは、make コマンドを呼び出したり、オブジェクト コードをビルドしたりしません。たとえば、関数 foo に対する C スタティック ライブラリを生成し、生成されたコードをビルドせずにソース コードを生成するには、次のコマンドを使用します。

codegen -config:lib -c foo

-jit

Just-In-Time (JIT) コンパイルを使用して、MATLAB コードの抽象表現を含む JIT MEX 関数を生成します。JIT コンパイルは MEX 関数の生成を高速化できます。このオプションは、MEX 関数を生成する場合にのみ使用できます。このオプションは、カスタム コードを含めたり、OpenMP ライブラリを使用したりするオプションなど、一部のコード生成オプションと互換性がありません。

JIT コンパイルを使用した MEX 生成速度の高速化を参照してください。

グローバル変数の指定

コマンド ラインで -globals オプションを使用して、グローバル変数を指定します。MATLAB ワークスペース内のグローバル変数を定義および初期化することもできます。グローバル変数のコード生成を参照してください。

オプション値説明
-globals globalArray

コード生成の対象にする MATLAB 関数で使用されるグローバル変数を定義および初期化します。

globalArray はグローバル変数の名前と初期値の cell 配列です。この cell 配列の形式は {global1,value1,global2,value2,...} です。以下に例を示します。

codegen foo -globals {"A",ones(4),"B",[1 2 3]} -args {0}

または、coder.typeof 関数を使用してグローバル変数の型を指定します。この場合、-globals オプションに渡す cell 配列の形式は {global1,{type1,value1},global2,{type2,value2},...} です。以下に例を示します。

codegen foo -globals {"A",{coder.typeof(0,[4 4]),ones(4)}}

最適化の指定

次の表に、生成コードの最適化を指定するオプションを示します。生成コードを最適化するために使用できる追加の手法については、生成された C/C++ および MEX コードの最適化を参照してください。

オプション値説明

-O enable:inline

-O disable:inline

生成コードで関数のインライン化を有効または無効にします。既定では、コード ジェネレーターはインライン化を使用します。関数インライン化の詳細については、生成コードのパフォーマンスと可読性を微調整するためのインライン化の制御を参照してください。

関数呼び出しを常にインライン化すると、コード生成の最適化で処理されるコード量が増えるため、コード生成にかかる時間が長くなる可能性があります。

-O enable:openmp

-O disable:openmp

生成コード内での OpenMP ライブラリの使用を有効または無効にします。この最適化を有効にし、OpenMP ライブラリが使用可能な場合、コード ジェネレーターは複数のスレッドで実行できる parfor ループを生成します。既定では、OpenMP ライブラリが使用可能な場合、コード ジェネレーターはそのライブラリを使用します。

OpenMP の最適化を無効にした場合、または OpenMP ライブラリが使用可能でない場合、コード ジェネレーターは parfor ループを for ループのように扱い、単一のスレッドで実行されるコードを生成します。

parfor ループのコンパイルの制御を参照してください。

-rowmajor

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

デバッグ オプションの指定

次の表に、生成コードおよびコード生成プロセスのデバッグに使用できるオプションを示します。ベスト プラクティスとして、スタンドアロンのコードや高速化された MEX 関数を生成する前には、MEX 関数を生成して実行して、MATLAB コードにコンプライアンスの問題がないかを確認することをお勧めします。MEX 関数を使用した MATLAB コードの問題の確認を参照してください。

オプション値説明
-g

C/C++ コンパイラのデバッグ モードを有効にします。デバッグ モードを有効にすると、コード ジェネレーターはコンパイラで使用される最適化の一部を無効にするため、コード生成の速度が向上することがあります。ただし、生成されたコードの実行速度が低下する可能性があります。

-profile

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

-report

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

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

-reportinfo info

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

-silentコード生成が警告なしで成功した場合にメッセージを非表示にするには、この最適化を有効にします。このオプションでは、警告メッセージやエラー メッセージは非表示になりません。
-test testFile

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

このオプションは MEX 関数を生成する場合にのみサポートされます。

Embedded Coder のライセンスをお持ちの場合は、ソフトウェアインザループ (SIL) またはプロセッサインザループ (PIL) の検証用のコードを生成する際にもこのオプションを使用することができます。Code Verification Through Software-in-the-Loop and Processor-in-the-Loop Execution (Embedded Coder)を参照してください。

-v

コード生成のステータスおよびターゲットのビルド ログ メッセージを表示します。

生成ファイルの名前および場所の制御

次の表に、コード ジェネレーターによって生成されるファイルの既定の基本名および場所を変更するために使用できるオプションを示します。

オプション値説明
-d folder

生成されたファイルを folder で指定された絶対パスまたは相対パスに保存します。フォルダー名には、以下を含めることはできません。

  • スペース (特定のオペレーティング システム構成でコード生成が失敗する原因となる可能性がある)

  • 7 ビットの ASCII 文字以外の文字 (日本語の文字など)

  • アスタリスク (*)、疑問符 (?)、ドル記号 ($)、または番号記号 (#) シンボル

folder で指定されたフォルダーが存在しない場合、コード ジェネレーターによってそのフォルダーが作成されます。

-o basename

MEX、ライブラリ、および実行可能ファイルを基本名 basename で生成します。基本名にはスペースを含めることはできません。特定のオペレーティング システム構成でコード生成が失敗する原因となる可能性があります。MEX 関数を生成する場合、basename は有効な MATLAB 関数名でなければなりません。

コード生成パスの変更

-I オプションを使用して、追加のフォルダーで MATLAB 関数やカスタム コード ファイルを検索するようにコード ジェネレーターに指示します。

オプション値説明
-I path

path をコード生成パスの先頭に追加します。コード ジェネレーターは、MATLAB 関数やカスタム C/C++ ファイルを検索するとき、まずコード生成パスを検索します。コード生成パスではクラスは検索されないため、クラスは MATLAB 検索パス上になければなりません。詳細については、パスとファイル構造の設定を参照してください。

パスに 7 ビットの ASCII 文字以外の文字 (日本語の文字など) が含まれている場合、コード ジェネレーターがそのパス上のファイルを検出できない可能性があります。

複数のパスを含めるには、含める各パスの前に -I を使用します。パスは、文字ベクトルまたは string として渡します。以下に例を示します。

codegen -I "C:\Project" -I "C:\Custom Files" foo

生成されたコードのエクスポート

次の表に、生成されたコードまたはコード生成設定を別の開発環境または MATLAB Coder アプリに転送するために使用できるオプションを示します。

オプション値説明
-package zipFile

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

このオプションの使用と packNGo 関数の使用は同じです。

-toproject projectFile

エントリポイント関数の名前、-args および -nargout の仕様、codegen オプション、およびすべての高度な構文を、projectFile という名前の MATLAB Coder プロジェクト ファイルに保存します。このコマンドは、codegen の仕様を MATLAB Coder アプリに転送する場合に使用します。次のコマンドを使用して、当該プロジェクト ファイルからコードを生成することもできます。

codegen projectFile

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

数値変換の実行

次の表に、MATLAB コードの数値変換を実行するために使用できるオプションを示します。これらのオプションを使用するには、Fixed-Point Designer™ のライセンスを所有していなければなりません。これらのオプションは、名前空間内のエントリポイント関数ではサポートされません。

オプション値説明
-config:single

単精度の MATLAB コードを生成します。

-double2single singleConfig

singleConfig (coder.SingleConfig オブジェクトでなければならない) で指定した設定を使用して、単精度の MATLAB コードを生成します。

コード ジェネレーターは、フォルダー codegen/fun/single 内にファイルを生成します。ここで、fun は、エントリポイント関数の名前です。

このオプションを指定し、スタンドアロン コードを生成するようにコード ジェネレーターに指示した場合、コード ジェネレーターは、単精度の C/C++ コードもフォルダー codgen/outputType/subfolder 内に生成します。ここで、次のようになります。

  • outputType は次のとおりです。

    • mex (MEX 関数用)

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

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

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

  • subfolder は、MATLAB 関数の名前の後に接尾辞を付加したものです。この接尾辞は、singleConfig オブジェクトの OutputFileNameSuffix プロパティを使用して指定します。

詳細については、単精度 MATLAB コードの生成を参照してください。

-float2fixed float2fixedConfig

float2fixedConfig (coder.FixPtConfig オブジェクトでなければならない) で指定した設定を使用して、固定小数点コードを生成します。

このオプションを指定し、スタンドアロン コードを生成するようにコード ジェネレーターに指示した場合、コード ジェネレーターは、固定小数点の C/C++ コードを生成します。コード ジェネレーターは、フォルダー codegen/outputType/fun_fixpt 内にファイルを生成します。ここで、fun は、エントリポイント関数の名前で、outputType は次のとおりです。

  • mex (MEX 関数用)

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

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

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

このオプションを指定し、スタンドアロン コードを生成しない場合、コード ジェネレーターは、フォルダー codegen/fun/fixpt 内に固定小数点の MATLAB コードを生成します。

このオプションを使用するには、float2fixedConfig オブジェクトの TestBenchName プロパティを使用してテスト ファイルを指定する必要があります。

詳細については、MATLAB コードの固定小数点 C コードへの変換を参照してください。

-singleC

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

CUDA コードの生成

次の表に、MATLAB コードから CUDA® コードを生成する際に使用できるオプションを示します。これらのオプションを使用するには、GPU Coder™ のライセンスを所有していなければなりません。

オプション値説明
-config gpuconfig

CUDA コード生成設定が含まれている構成オブジェクトを指定します。この構成オブジェクトを生成するには、関数 coder.gpuConfig (GPU Coder) を使用します。

コマンド ライン インターフェイスを使用したコードの生成 (GPU Coder)を参照してください。

-gpuprofile

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

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

MEX 以外のターゲットをプロファイリングするには、Embedded Coder のライセンスが必要です。

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

コード生成の対象にする MATLAB 関数。関数名として指定します。関数は現在の作業フォルダー内に存在するか、パス上になければなりません。MATLAB 名前空間内の関数を指定するには、関数名の先頭に名前空間名を追加し、その後にドットを追加します。名前空間も、現在の作業フォルダー内に存在するか、パス上になければなりません。MATLAB ファイルが 7 ビットの ASCII 文字以外の文字 (日本語の文字など) を含むパス上にある場合、コード ジェネレーターはそのファイルを検出できない可能性があります。

例: codegen myFunction

例: codegen myNamespace.myFunction

MATLAB 関数 fun の入力引数。例の値の cell 配列または coder.Type オブジェクトとして指定します。cell 配列における各要素の位置は、関数定義における入力引数の位置に対応していなければなりません。

coder.Type オブジェクトを作成するには、coder.typeof または coder.newtype を使用します。関数が引数を取らないことを示すには、inputs を空の cell 配列 {} として指定します。

arguments ブロックまたは assert ステートメントを使用して関数本体で入力引数を定義している場合は、inputs 引数を指定する必要はありません。詳細については、Use Function Argument Validation to Specify Entry-Point Input TypesおよびMATLAB コードで assert ステートメントを使用した入力の型の指定を参照してください。

例: codegen foo -args {0}

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

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

MATLAB 関数 fun に対して生成する出力引数の数。整数として指定します。コード ジェネレーターは指定した数の出力引数を MATLAB 関数定義での発生順に生成します。関数 funvarargout を使用している場合は、出力引数の数を指定する必要があります。エントリポイント関数の入力引数または出力引数の数の指定を参照してください。

例: codegen foo -nargout 2

例: codegen foo -args {0} -nargout 2

高度なコード生成構文。構文フラグメントまたはスペースで区切られた構文フラグメントのリストとして指定します。次の表に、任意の順序で組み合わせることができる構文フラグメントを示します。

構文フラグメント説明
fun1 -args inputs1 ... funN inputsN複数のエントリポイント関数のコードを生成します。
fun -args inputs1 ... -args inputsNエントリポイント関数に対して複数のシグネチャを生成します。
file1 ... fileN

生成されたコードにカスタム ソース ファイルを含めます。次の種類のファイルを指定できます。

  • C ファイル (.c)

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

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

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

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

カスタム ファイルが 7 ビットの ASCII 文字以外の文字 (日本語の文字など) を含むパス上にある場合、コード ジェネレーターのコマンドがそのファイルを検出できない可能性があります。

projectFile

CODERPRJ ファイルとして指定した MATLAB Coder プロジェクトのコードを生成します。コード ジェネレーターは、プロジェクト ファイルに保存されているエントリ ポイント、入力の型、およびコード生成オプションを使用してコードを生成します。codegen コマンドの等価な MATLAB Coder プロジェクトへの変換を参照してください。

この構文は、他のどの構文とも組み合わせることができません。

制限

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

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

ヒント

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

  • -d オプションを使用して場所を指定しなかった場合、コード ジェネレーターはフォルダー codgen/outputType/functionName 内に C/C++ ソース、ヘッダー、およびオブジェクト ファイルを作成します。ここで、functionNamecodegen コマンドに渡す最初の関数の名前であり、outputType は次のいずれかです。

    • mex (MEX 関数用)

    • lib (C/C++ スタティック ライブラリ用)

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

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

    コード ジェネレーターは、生成された MEX 関数を作業フォルダーに保存します。

    たとえば、次の codegen コマンドについて考えます。

    codegen -config:lib fun1 fun2

    コード ジェネレーターは、フォルダー codgen/lib/fun1 内に C ソース、ヘッダー、およびオブジェクト ファイルを作成します。

  • スタンドアロン コードを生成する際に、-o オプションを使用して出力ファイル名を指定しなかった場合、コード ジェネレーターは、コード生成の対象にした MATLAB 関数の名前で始まるソース、ヘッダー、およびオブジェクト ファイルを作成します。

  • MEX 関数を生成する際に -o オプションを使用して出力ファイル名を指定しなかった場合、コード ジェネレーターは、左から右の順に最初の MATLAB 関数の名前に _mex を追加します。たとえば、次の codegen コマンドによって生成された MEX 関数の名前は foo_mex で始まります。

    codegen foo bar

  • コード ジェネレーターは、生成されたファイルに、プラットフォームおよびビルド固有の拡張子を追加します。

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

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

    • .dll (Microsoft® Windows® プラットフォームの C/C++ ダイナミック ライブラリの場合)

    • .so (Linux® プラットフォームの C/C++ ダイナミック ライブラリの場合)

    • .dylib (Mac プラットフォームの C/C++ ダイナミック ライブラリの場合)

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

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

    codegen('myfunction','-args',{2 3},'-report')
    
  • プログラミングによる codegen 呼び出しを実行するには、関数構文を使用します。以下に例を示します。

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

バージョン履歴

R2011a で導入

すべて展開する