Ho difficoltà usando il compilatore mcc in MATLAB (errore utilizzando ==> MCC La directory di output non esiste)

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

Domanda

Sto cercando di costruire il file assembly .NET eseguendo questo codice matlab2010b

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

Ricevo questo errore.

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

Sono abbastanza sicuro che sia a causa dello spazio nel percorso della directory "... \ codice sorgente \ ...". Perché se mi basta usare un altro percorso senza spazi funziona perfettamente bene.

C'è un modo per fare questo lavoro?

Grazie.

È stato utile?

Soluzione

Credo che il vero problema si verifica con il tuo EVAL dichiarazione. Si crea una stringa di valutare concatenando stringhe come dnetdir e mfile, ognuno dei quali avrà un percorso di file con uno spazio in esso. La stringa risultante si passa alla EVAL sarà simile a questa:

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

Quello che dovete fare è costruire la vostra stringa in modo che non ci siano apostrofi intorno a queste strade, in questo modo:

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

che si tradurrà in una stringa che assomiglia a questo:

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

E quale sarà valutata correttamente ora anche con quella brutta spazio in là.

Altri suggerimenti

Non ho alcuna esperienza con mcc ma alcune altre funzioni può soffrire di problemi simili in quanto la maggior parte delle persone sono abituate a utilizzare la modalità di comando (vale a dire simile al prompt dei comandi in DOS, Linux, Mac, ...). Tuttavia, la maggior parte delle funzioni sono in realtà funzioni tali che si possono usare in modalità funzione e passare i loro argomenti tra parentesi.

È inoltre possibile utilizzare mcc in funzione modalità, come descritto nella guida. Questo potrebbe sembrare un po 'come:

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

In questo modo si dovrebbe non deve preoccuparsi di sfuggire a qualsiasi carattere.

provare a cambiare l'ultima riga a:

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

di notare le virgolette in più intorno dnetdir

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top