MATLAB Compiler を使用した依存関係の分析
MATLAB® Compiler™ は依存関係の分析関数を使用して、生成されるパッケージに含める必要なファイルのリストを決定します。このプロセスでは、長いファイル リストの生成される場合があります。これは特に、MATLAB オブジェクト クラスがコンパイルに存在し、依存関係の分析プロセスではパッケージ化時にオーバーロード メソッドを解決できない場合に発生します。MATLAB Compiler 依存関係の分析では、各パスの include/exclude ファイルも処理します。
ヒント
パッケージ化時のパフォーマンスを改善し、アプリケーション サイズを小さくするには、mcc コマンドの および -N-p フラグを使用してパスを短くします。また、mcc -a フラグ、コンパイラ アプリの [カスタム要件] セクション、または compiler.build 関数の AdditionalFiles オプションを使用して、含めるファイルを指定することもできます。
関数の依存関係
依存関係の分析プロセスでは、以下のような実行可能コンテンツが検索されます。
MATLAB ファイル
P ファイル
メモ
P ファイルに対応する MATLAB ファイルが使用できない場合、依存関係の分析では P ファイルの依存関係を判断できません。
.figファイルMEX ファイル
MATLAB Compiler は、feval、eval、Handle Graphics® コールバック、または MAT ファイルから読み込まれたオブジェクトを通して呼び出される関数を検出できません。関数を明示的に含めるには、%#function プラグマを使用します。以下に例を示します。
function foo
%#function bar
feval('bar');
end %function foo
%#function bar 行により、関数 bar がコンパイルに含められ、feval を通して呼び出されることが MATLAB Compiler に通知されます。
デプロイ可能なアーティファクトにファイルを含める方法の詳細については、パッケージ化されたアプリケーションでのファイルの追加とアクセスを参照してください。
MEX ファイル、DLL、共有ライブラリを含める
MEX ファイルを含んでいる MATLAB 関数をコンパイルする場合は、依存関係の分析プロセスによる検索が可能であることを確認してください。特に次の点に注意してください。
依存関係の分析関数では、MEX ファイル、DLL または共有ライブラリを調べて依存関係を判定することができないため、これらのファイルに必要なすべての実行可能ファイルは明示的に含めてください。
MEX ファイル、DLL、共有ライブラリによって呼び出された MATLAB 関数を、依存関係の分析中に検索できるかどうかわからない場合は、手動で含めてください。
コンパイラと互換性がない関数もあります。ビルドが完了したら、ファイル
mccExcludedFiles.logを確認してください。このファイルには、デプロイできないアプリケーションから呼び出されたすべての関数がリストされています。
ライセンスとツールボックスの依存関係
必要なツールボックスを特定する方法の詳細については、MATLAB Answers の投稿 How do I determine the required toolboxes and licenses for my MATLAB code? を参照してください。
データ ファイルの依存関係
実行可能コンテンツに加え、MATLAB Compiler は、audioinfo、audioread、csvread、daqread、dlmread、fileread、fopen、imfinfo、importdata、imread、load、matfile、mmfileinfo、open、readtable、type、VideoReader、xlsfinfo、xlsread、xmlread、xslt のうち任意の関数を呼び出して、MATLAB 関数がアクセスするファイルの検出と自動インクルードを行うことができます。
コンパイラ アプリは、検出されたデータ ファイルをデプロイ可能なアーカイブに自動的に追加します。
コンパイルされたアプリケーションに、特定のファイルが含まれ、かつアクセス可能にするには、ファイルをパスなしで指定します。つまり、現在のディレクトリまたは MATLAB パスにリストされた任意のディレクトリからファイルにアクセスできる状態にしておく必要があります。以下に例を示します。
fileread('myfile.ext')パッケージからのファイルの除外
依存関係の分析中にデータ ファイルを無視するには、以下のオプションを 1 つ以上使用します。これらのオプションを一緒に使用する方法の例は、%#exclude を参照してください。
依存関係の分析中にファイルまたは関数を無視するために、MATLAB コードで
%#excludeプラグマを使用する。依存関係の分析中に検出されたすべてのデータ ファイルを無視するために、
mccコマンドで-Xフラグを使用する。データ ファイルが自動的にパッケージに含まれるかどうかを制御するために、関数
compiler.buildのAutoDetectDataFilesオプションを使用する。これをfalse/'off'/0に設定することは、-Xの使用と等価です。
依存関係が不足している場合のトラブルシューティング
1 つ以上の依存関係が見つからない場合、不足している項目のリストが MATLAB Compiler により unresolvedSymbols.txt ファイルに取り込まれます。このファイルが空でない場合、必要な依存関係を特定し、それらを検索パスに配置することで確実に使用できるようにする必要があります。その後、プロジェクトを再パッケージ化します。依存関係がどれもデプロイ可能でない場合、isdeployed boolean を使用してデプロイするまでは、その機能をコードで引き続き使用できます。
一部の機能には特定の MathWorks® 製品が必要です。関数 matlab.codetools.requiredFilesAndProducts を使用して、指定した MATLAB プログラム ファイルを実行するために必要になる可能性がある MATLAB ファイルと MathWorks 製品のリストを表示できます。
MATLAB Compiler の制限およびトラブルシューティングのヘルプに関する詳細は、制限を参照してください。
参考
compiler.build.standaloneApplication | スタンドアロン アプリケーション コンパイラ | mcc | isdeployed