MATLABでMCCコンパイラの使用に問題があります(==> MCCを使用してエラー出力ディレクトリが存在しません)
-
26-10-2019 - |
質問
MATLAB2010Bでこのコードを実行して、.NETアセンブリファイルを構築しようとしています
workdir = 'C:\Users\H\Documents\Source Code\MatlabFiles';
outdir = fullfile(workdir, 'Output');
dnetdir = fullfile(workdir, 'dotnet');
%% Determine file names
mfile = fullfile(workdir, 'perform.m');
dnetdll = fullfile(dnetdir, 'dotnet.dll');
%% Create directories if needed
if (exist(outdir, 'dir') ~= 7)
mkdir(outdir);
end
if (exist(dnetdir, 'dir') ~= 7)
mkdir(dnetdir);
end
%% Build .NET Assembly
eval(['mcc -N -d ' dnetdir ' -W ''dotnet:dotnet,' ...
'dotnetclass,0.0,private'' -T link:lib ' mfile]);
このエラーが発生しています。
??? Error using ==> mcc
The output directory,
'C:\Users\H\Documents\Project\thesis\Source'
does not exist.
ディレクトリパスのスペース「... ソースコード ...」のためだと確信しています。スペースのない別のパスを使用するだけで、完全に正常に機能するからです。
これを機能させる方法はありますか?
ありがとうございました。
解決
実際の問題はあなたと一緒に発生していると思います 評価します 声明。あなたは、次のように連結する文字列によって評価する文字列を構築します dnetdir
と mfile
, 、それぞれにスペースが入ったファイルパスがあります。評価するために渡す結果の文字列は次のようになります:
mcc -N -d C:\Users\H\Documents\Source Code\MatlabFiles\dotnet -W ...
^--Look at that ugly space!
あなたがする必要があるのは、これらのパスの周りにアポストロフィがあるようにあなたの文字列を構築することです。
eval(['mcc -N -d ''' dnetdir ''' -W ''dotnet:dotnet,' ...
'dotnetclass,0.0,private'' -T link:lib ''' mfile '''']);
これにより、次のようになります。
mcc -N -d 'C:\Users\H\Documents\Source Code\MatlabFiles\dotnet' -W ...
そして、そこにその厄介な空間があっても、今では適切に評価されます。
他のヒント
経験はありません mcc
しかし、ほとんどの人はコマンドモードを使用することに慣れているため、他の関数には同様の問題に悩まされる可能性があります(つまり、DOS、Linux、Macなどのコマンドプロンプトと同様)。ただし、ほとんどの関数は、機能モードでそれらを使用し、括弧内で引数を渡すことができるようにするため、実際に関数です。
使用することもできます MCC 機能モードでは、ヘルプで説明されています。それはある程度見えるかもしれません:
mcc('-N', '-d', dnetdir, '-W', 'dotnet:dotnet,dotnetclass,0.0,private', '-T', 'link:lib', mfile);
そうすれば、キャラクターを逃れることを心配する必要はありません。
最後の行を次のように変更してみてください。
eval(['mcc -N -d ''' dnetdir ''' -W ''dotnet:dotnet,' ...
'dotnetclass,0.0,private'' -T link:lib ' mfile]);
周りに余分な引用符に注意してください dnetdir
所属していません StackOverflow