main 関数の例を使用した生成コードの組み込み
生成された C/C++ コードを使用するアプリケーションをビルドする場合、生成されたコードを呼び出す C/C++ main 関数を提供しなければなりません。
既定では、C/C++ ソース コード、スタティック ライブラリ、ダイナミック ライブラリおよび実行可能ファイルのコード生成用に、MATLAB® Coder™ は C/C++ main 関数の例を生成します。この関数は、生成された C/C++ コードのアプリケーションへの組み込みに役立つテンプレートです。main 関数の例は動的に割り当てられたデータなどのデータを宣言して初期化します。これは、エントリポイント関数を呼び出しますが、エントリポイント関数が返す値は使用しません。
MATLAB Coder は、ビルド フォルダーの examples
サブフォルダーで main 関数の例に対するソース ファイルとヘッダー ファイルを生成します。C コード生成の場合、ファイル main.c
と main.h
を生成します。C++ コード生成の場合、ファイル main.cpp
と main.h
を生成します。
ファイル main.c
と main.h
を examples
サブフォルダーで変更しないでください。変更すると、コードの再生成時に MATLAB Coder でメイン ファイルの例が再生成されません。生成されたファイルに対する変更が検出されたことを警告します。main 関数の例を使用する前に、メイン ソース ファイルとヘッダー ファイルの例をビルド フォルダー以外の場所にコピーします。アプリケーションの要件を満たすように新しい場所でファイルを変更します。
関数 packNGo
と MATLAB Coder アプリの [パッケージ] オプションは、既定の構成設定を使用してファイルを生成する際にメイン ソース ファイルとヘッダー ファイルの例をパッケージ化しません。メイン ファイルの例をパッケージ化するには、コード生成を構成し、main 関数の例を生成してコンパイルし、コードを生成してからビルド ファイルをパッケージ化します。
main 関数の例を使用したワークフロー
コード生成用に MATLAB コードを準備します。
実行時の問題を確認します。
main の例の生成が有効になっていることを確認します。
エントリポイント関数の C/C++ コードを生成します。
メイン ファイルの例を
examples
サブフォルダーから別のフォルダーへコピーします。アプリケーションの要件を満たすように新しいフォルダーでメイン ファイルの例を変更します。
必要なプラットフォームに対して、main の例と生成されたコードを展開します。
アプリケーションをビルドします。
main の例の生成方法と、main の例を使用した実行可能ファイルのビルド方法については、アプリケーションにおける C の main の例の使用を参照してください。
MATLAB Coder アプリを使用した main の例の生成の制御
[コード生成] ページで [生成] ダイアログ ボックスを開くために [生成] 矢印 をクリックします。
[生成] ダイアログ ボックスで [ビルド タイプ] を以下のいずれかに設定します。
ソース コード
スタティック ライブラリ
ダイナミック ライブラリ
実行可能ファイル
[詳細設定] をクリックします。
[すべての設定] タブの [詳細設定] で [main の例の生成] を次のいずれかに設定します。
設定値 対象 main 関数の例を生成しない
C/C++ main 関数の例を生成しません。 main 関数の例を生成するが、コンパイルしない
(既定)C/C++ main 関数の例を生成しますが、コンパイルはしません。 main 関数の例を生成してコンパイルする
C/C++ main 関数の例を生成してコンパイルします。
コマンド ライン インターフェイスを使用した main の例の生成の制御
'lib'
、'dll'
または'exe'
用のコード構成オブジェクトを作成します。次に例を示します。cfg = coder.config('lib'); % or dll or exe
GenerateExampleMain
プロパティを設定します。設定値 対象 'DoNotGenerate'
C/C++ main 関数の例を生成しません。 'GenerateCodeOnly'
(既定)C/C++ main 関数の例を生成しますが、コンパイルはしません。 'GenerateCodeAndCompile'
C/C++ main 関数の例を生成してコンパイルします。 次に例を示します。
cfg.GenerateExampleMain = 'GenerateCodeOnly';