У меня проблемы с использованием компилятора MCC в MATLAB (ошибка с использованием ==> MCC Входной каталог не существует)

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

Вопрос

Я пытаюсь построить файл сборки .NET, выполнив этот код в 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]);

Я получаю эту ошибку.

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

Я уверен, что это из -за места в пути каталога "... Source Code ...". Потому что, если я просто использую другой путь без пробелов, он работает совершенно нормально.

Есть ли способ сделать эту работу?

Спасибо.

Это было полезно?

Решение

Я думаю, что фактическая проблема возникает с вашим Оценка утверждение. Вы строите строку, чтобы оценить путем объединения строк, таких как dnetdir а также mfile, каждый из которых будет иметь путь файла с пространством в нем. Полученная строка, которую вы проходите, будет выглядеть так:

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

И который будет оцениваться правильно сейчас даже с этим неприятным пространством там.

Другие советы

У меня нет опыта с mcc Но некоторые другие функции могут страдать от аналогичных проблем, поскольку большинство людей привыкли использовать командный режим (т.е. аналогично командной строке в DOS, Linux, Mac, ...). Тем не менее, большинство функций действительно являются функциями, так что вы можете использовать их в режиме функций и передавать их аргументы в рамках скобок.

Вы также можете использовать МакК В режиме функционального режима, как описано в справке. Это может выглядеть несколько похоже на:

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

Таким образом, вам не нужно беспокоиться о том, чтобы избежать любого персонажа.

Попробуйте изменить последнюю строку на:

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

Обратите внимание на дополнительные цитаты вокруг dnetdir

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top