パッケージ化されたアプリケーションでのファイルの追加とアクセス
MATLAB® スクリプト ファイルに加えて、データ ファイル、DLL、および他のプログラミング言語のファイルなど、他のタイプのファイルをデプロイ可能なアーカイブに追加できます。関数 which を使用するか、デプロイ可能なアーカイブのルート ctfroot を基準としたファイルの場所を参照して、デプロイしたコードから追加ファイルにアクセスできます。
デプロイ可能なアーカイブの詳細については、デプロイ可能なアーカイブについてを参照してください。
デプロイ可能なアーカイブにファイルを含める
MATLAB Compiler™ は依存関係の分析関数を使用して、生成されるパッケージに含める必要なファイルのリストを決定します。詳細については、MATLAB Compiler を使用した依存関係の分析を参照してください。
mcc コマンドで -a フラグを使用するか、compiler.build.standaloneApplication のように関数 compiler.build を使用した 'AdditionalFiles' オプションで、デプロイ可能なアーカイブに追加ファイルを含めることができます。
あるいは、コンパイラ アプリの [カスタム要件] セクションにファイルを追加することもできます。
%#function プラグマを使用して MATLAB データ ファイルを明示的に含める
既定では、コンパイラは依存関係の分析中に MATLAB データ ファイル (MAT ファイル) を除外します。データ ファイルを手動で追加すると、それらを含めることができます。
コンパイラで MAT ファイル内のデータを明示的に調べる場合、MATLAB コードを記述するときに %#function プラグマを指定します。
たとえば、MAT ファイルから読み込まれた ClassificationSVM クラスへの依存関係を含める場合は、%#function プラグマを使用します。
function foo %#function ClassificationSVM load('svm-classifier.mat'); num_dimensions = size(svm_model.PredictorNames, 2); end %function foo
MEX ファイル、DLL、共有ライブラリを含める
MEX ファイルを含んでいる MATLAB 関数をコンパイルする場合は、依存関係の分析プロセスによる検索が可能であることを確認してください。特に次の点に注意してください。
依存関係の分析関数では、MEX ファイル、DLL または共有ライブラリを調べて依存関係を判定することができないため、これらのファイルに必要なすべての実行可能ファイルは明示的に含めてください。
MEX ファイル、DLL、共有ライブラリによって呼び出された MATLAB 関数を、依存関係の分析中に検索できるかどうかわからない場合は、手動で含めてください。
コンパイラと互換性がない関数もあります。ビルドが完了したら、ファイル
mccExcludedFiles.logを確認してください。このファイルには、デプロイできないアプリケーションから呼び出されたすべての関数がリストされています。
デプロイした関数からのファイルへのアクセス
デプロイした MATLAB コードからファイルにアクセスするには、isdeployed を使用して、コードがデプロイ モードで実行されているかどうかをチェックします。次に、関数 which を使用するか、ctfroot を基準としたファイルの場所を指定して、ファイルを特定します。
関数 which の使用
ファイルへのパスを取得する最も簡単な方法は、関数 which を使用してファイルを特定することです。
if isdeployed locate_externapp = which('extern_app.exe'); end
which は、デプロイ可能なアーカイブ内にあれば、ファイル extern_app.exe へのパスを返します。ctfroot でのファイルの場所の指定
現在の MATLAB 作業フォルダー以外のフォルダーにあるファイルを含めると、ファイルの部分パスは ctfroot を基準としたデプロイ可能なアーカイブに保持されます。
現在の MATLAB 作業フォルダーまたはサブフォルダー内のファイルは、現在のフォルダーからファイルへの相対パスを保持します。
たとえば、パッケージ化中に MATLAB で開くフォルダーが
D:\Documents\Work\MyProjの場合、ファイルD:\Documents\Work\MyProj\exfiles\data1.matはデプロイ可能なアーカイブのに配置されます。ここで、ctfroot\mfilename\exfiles\data1.matmfilenameはメインの MATLAB スクリプト ファイルの名前です。現在の作業フォルダー外にあるファイルは、ディスク ドライブのルートから完全なフォルダー構造を保持します。
たとえば、ファイル
C:\Users\mwuser\Documents\External\externdata\extern_app.exeはデプロイ可能なアーカイブのに配置されます。ctfroot\Users\mwuser\Documents\External\externdata\extern_app.exe
関数 fullfile を使用し、ファイル パスでシステムの正しいファイル区切りが使用されていることを確認してください。
if isdeployed locate_data1 = fullfile(ctfroot,'exfiles','data1.mat'); locate_data2 = fullfile(ctfroot,'Users','mwuser','Documents',... 'External','externdata','extern_app.exe'); end
デプロイされたアプリケーションの MATLAB データの処理例
この例では、データ ファイルをパッケージ化されたアプリケーション内に含めて、関数 load と save を使用して MATLAB データを操作する方法を説明します。
MATLAB の作業フォルダーに移動します。この例での作業フォルダーは
C:\Users\mwuser\Documents\Work\exfilesです。MATLAB に付属している
Data_Handlingフォルダーとexterndataフォルダーを作業フォルダーにコピーします。copyfile(fullfile(matlabroot,'extern','examples','compiler','Data_Handling'),'Data_Handling'); copyfile(fullfile(matlabroot,'extern','examples','compiler','externdata'),'externdata');
MATLAB コマンド プロンプトで、作業フォルダー内の新しい
Data_Handlingフォルダーに移動します。ex_loadsave.mを調べます。ex_loadsaveスクリプトは、それぞれ異なるフォルダーに配置されている 3 つの MATLAB データ ファイルを読み込みます。user_data.mat— 現在のフォルダーuserdata\extra_data.mat— 現在のフォルダーのサブフォルダー..\externdata\extern_data.mat— 現在のフォルダー以外
データ ファイルをリストする cell 配列を作成します。
datafiles = {'user_data.mat','./userdata/extra_data.mat','../externdata/extern_data.mat'};関数
compiler.build.standaloneApplicationを使用してex_loadsave.mをコンパイルします。compiler.build.standaloneApplication('ex_loadsave.m','AdditionalFiles',datafiles)
コンパイルされたアプリケーションを実行します。
!ex_loadsavestandaloneApplication\ex_loadsave.exeLoad A from : C:\Users\mwuser\AppData\Local\Temp\mwuser\mcrCache9.13\ex_loa0\ex_loadsave\user_data.mat A= 21.4669 15.7255 15.6930 11.8122 19.6691 17.0570 17.4689 22.2803 20.3894 17.2548 17.3474 17.7316 19.3062 15.1321 16.0573 25.4584 Load B from : C:\Users\mwuser\AppData\Local\Temp\mwuser\mcrCache9.13\ex_loa0\ex_loadsave\userdata\extra_data.mat B= 15.3970 20.5682 13.8388 26.5186 14.2255 24.6506 18.9545 24.8117 14.9904 22.8211 16.4942 25.3533 13.1022 26.0567 21.2197 24.8940 Load extern data from : C:\Users\mwuser\AppData\Local\Temp\mwuser\mcrCache9.13\ex_loa0\Users\mwuser\Documents\Work\exfiles\externdata\extern_data.mat ext_data= 27.6923 69.4829 43.8744 18.6873 4.6171 31.7099 38.1558 48.9764 9.7132 95.0222 76.5517 44.5586 82.3458 3.4446 79.5200 64.6313 A * B = 1.0e+03 * 0.9442 1.4951 1.1046 1.6514 1.0993 1.8042 1.3564 1.9424 1.0518 1.7026 1.2716 1.8500 1.0868 1.7999 1.3591 1.9283 Save the A * B result to : C:\Users\mwuser\Documents\Work\exfiles\Data_Handling\output\saved_data.mat結果を
ex_loadsave.mの出力と比較します。
