matlab.net-assemblymatlab-deploymentmcc

I have trouble using mcc compiler in MATLAB (Error using ==> mcc The output directory does not exist)


I'm trying to build the .NET assembly file by executing this code in 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]);

I'm getting this error.

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

I'm pretty sure it's because of the space in the directory path "...\Source Code\...". Because if I just use another path with no spaces it works perfectly fine.

Is there a way to make this work?

Thank you.


Solution

  • I think the actual problem occurs with your EVAL statement. You build a string to evaluate by concatenating strings like dnetdir and mfile, each of which will have a file path with a space in it. The resulting string you pass to EVAL will look like this:

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

    What you need to do is build your string so that there are apostrophes around these paths, like this:

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

    Which will result in a string that looks like this:

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

    And which will be evaluated properly now even with that nasty space in there.