Ich habe Probleme mit dem MCC -Compiler in MATLAB (Fehler mit ==> MCC Das Ausgabeverzeichnis existiert nicht)

StackOverflow https://stackoverflow.com/questions/5825243

Frage

Ich versuche, die .NET -Assembly -Datei zu erstellen, indem ich diesen Code in MATLAB2010B ausführte

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]);

Ich bekomme diesen Fehler.

??? Error using ==> mcc
The output directory,
  'C:\Users\H\Documents\Project\thesis\Source'
does not exist.

Ich bin mir ziemlich sicher, dass es am Platz im Verzeichnispfad liegt "... Source Code ...". Denn wenn ich nur einen anderen Weg ohne Leerzeichen benutze, funktioniert es perfekt gut.

Gibt es eine Möglichkeit, diese Arbeit zu machen?

Vielen Dank.

War es hilfreich?

Lösung

Ich denke, das tatsächliche Problem tritt bei Ihrem auf Bewerten Aussage. Sie erstellen eine Schnur, um durch Verkettung von Saiten wie zu bewerten dnetdir und mfile, Jede davon wird ein Dateipfad mit einem Speicherplatz enthalten. Die resultierende Zeichenfolge, die Sie an die Bewertung verabschieden, sieht folgendermaßen aus:

mcc -N -d C:\Users\H\Documents\Source Code\MatlabFiles\dotnet -W ...
                                     ^--Look at that ugly space!

Was Sie tun müssen, ist, Ihre Zeichenfolge so zu erstellen, dass diese Pfade wie folgt Apostrophen um diese Wege gibt:

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

Dies führt zu einer Zeichenfolge, die so aussieht:

mcc -N -d 'C:\Users\H\Documents\Source Code\MatlabFiles\dotnet' -W ...

Und das wird jetzt auch mit diesem bösen Raum dort richtig bewertet.

Andere Tipps

Ich habe keine Erfahrung mit mcc Einige andere Funktionen können jedoch unter ähnlichen Problemen leiden, da die meisten Menschen den Befehlsmodus verwenden (dh ähnlich der Eingabeaufforderung in DOS, Linux, Mac, ...). Die meisten Funktionen sind jedoch wirklich Funktionen, sodass Sie sie im Funktionsmodus verwenden und ihre Argumente innerhalb von Klammern übergeben können.

Sie können auch verwenden MCC Im Funktionsmodus, wie in der Hilfe beschrieben. Das könnte ein bisschen aussehen:

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

Auf diese Weise sollten Sie sich keine Sorgen machen müssen, einem Charakter zu entkommen.

Versuchen Sie, die letzte Zeile zu ändern auf:

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

Beachten Sie die zusätzlichen Zitate um dnetdir

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top