1

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.

ディレクトリパス「...\SourceCode\...」のスペースが原因だと確信しています。スペースのない別のパスを使用するだけで、完全に正常に機能するためです。

これを機能させる方法はありますか?

ありがとうございました。

4

3 に答える 3

2

実際の問題はEVALステートメントで発生すると思います。dnetdirとのような文字列を連結して評価する文字列を作成しますmfile。それぞれの文字列には、スペースを含むファイル パスが含まれます。EVAL に渡す結果の文字列は次のようになります。

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 ...

そして、そこにその厄介なスペースがあっても、これは適切に評価されます。

于 2011-04-28T21:38:46.550 に答える
1

私は経験がありませんがmcc、ほとんどの人がコマンドモード(つまり、DOS、Linux、Macなどのコマンドプロンプトに似ています)を使用することに慣れているため、他のいくつかの機能でも同様の問題が発生する可能性があります。ただし、ほとんどの関数は実際には関数であるため、関数モードで使用し、括弧内に引数を渡すことができます。

ヘルプで説明されているように、関数モードでmccを使用することもできます。これは次のようになります。

mcc('-N', '-d', dnetdir, '-W', 'dotnet:dotnet,dotnetclass,0.0,private', '-T', 'link:lib', mfile);

そうすれば、キャラクターの脱出について心配する必要はありません。

于 2011-04-28T22:29:21.397 に答える
0

最後の行を次のように変更してみてください。

eval(['mcc -N -d ''' dnetdir ''' -W ''dotnet:dotnet,' ...
    'dotnetclass,0.0,private'' -T link:lib ' mfile]);

周りの余分な引用符に注意してくださいdnetdir

于 2011-04-28T21:45:12.957 に答える