J'ai du mal en utilisant le compilateur mcc dans MATLAB (erreur en utilisant ==> mcc Le répertoire de sortie n'existe pas)

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

Question

Je suis en train de construire le fichier d'assemblage .NET en exécutant ce code dans 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]);

J'obtiens cette erreur.

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

Je suis assez sûr que c'est à cause de l'espace dans le chemin du répertoire « ... \ code source \ ... ». Parce que si je viens d'utiliser un autre chemin sans espace, il fonctionne parfaitement bien.

Y at-il un moyen de faire ce travail?

Merci.

Était-ce utile?

La solution

Je pense que le problème réel se produit avec votre déclaration EVAL . Vous construisez une chaîne pour évaluer par concaténer des chaînes comme dnetdir et mfile, dont chacun aura un chemin de fichier avec un espace en elle. La chaîne résultante vous passez à EVAL ressemblera à ceci:

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

Ce que vous devez faire est de construire votre chaîne pour qu'il y ait autour de ces chemins apostrophes, comme ceci:

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

Ce qui se traduira par une chaîne qui ressemble à ceci:

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

Et qui sera évalué correctement maintenant même avec cet espace méchant là-dedans.

Autres conseils

Je n'ai aucune expérience avec mcc mais d'autres fonctions peuvent souffrir de problèmes similaires puisque la plupart des gens sont habitués à utiliser le mode de commande (par exemple similaire à l'invite de commande sous DOS, Linux, Mac, ...). Cependant, la plupart des fonctions sont vraiment des fonctions telles que vous pouvez les utiliser en mode de fonction et de transmettre leurs arguments entre parenthèses.

Vous pouvez également utiliser en fonction mcc le mode, tel que décrit dans l'aide. Cela pourrait ressembler un peu comme:

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

De cette façon, vous ne devriez pas avoir à vous soucier de s'échapper un caractère.

essayez de changer la dernière ligne à:

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

notez bien les guillemets supplémentaires autour dnetdir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top