我正在尝试通过在matlab2010b
中执行此代码来构建.NET程序集文件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 \ ...”。 因为如果我只使用没有空格的另一条路径,它就可以很好地工作。
有没有办法让这项工作?
谢谢。
答案 0 :(得分:2)
我认为您的EVAL声明会出现实际问题。您可以通过连接像dnetdir
和mfile
这样的字符串来构建要评估的字符串,每个字符串都有一个文件路径,其中包含空格。传递给EVAL的结果字符串将如下所示:
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 ...
即使在那里有令人讨厌的空间,现在也会正确评估。
答案 1 :(得分:1)
我对mcc
没有任何经验,但是其他一些功能可能会遇到类似的问题,因为大多数人都习惯使用命令模式(即类似于DOS,Linux,Mac,...中的命令提示符)。 ..)。但是,大多数函数实际上都是函数,您可以在函数模式下使用它们并在括号内传递它们的参数。
您也可以在功能模式下使用mcc,如帮助中所述。这可能看起来像:
mcc('-N', '-d', dnetdir, '-W', 'dotnet:dotnet,dotnetclass,0.0,private', '-T', 'link:lib', mfile);
这样你就不必担心逃避任何角色。
答案 2 :(得分:0)
尝试将最后一行更改为:
eval(['mcc -N -d ''' dnetdir ''' -W ''dotnet:dotnet,' ...
'dotnetclass,0.0,private'' -T link:lib ' mfile]);
请注意dnetdir