1

我正在尝试通过在 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\...”中的空间。因为如果我只使用另一条没有空格的路径,它就可以很好地工作。

有没有办法使这项工作?

谢谢你。

4

3 回答 3

2

我认为您的EVAL语句出现了实际问题。dnetdir您可以通过连接类似and的字符串来构建一个要评估的字符串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 ...

即使那里有那个令人讨厌的空间,现在也将对其进行正确评估。

于 2011-04-28T21:38:46.550 回答
1

我没有任何经验,mcc但其他一些功能可能会遇到类似的问题,因为大多数人习惯于使用命令模式(即类似于 DOS、Linux、Mac 中的命令提示符......)。但是,大多数函数都是真正的函数,因此您可以在函数模式下使用它们并在括号内传递它们的参数。

您还可以在功能模式下使用mcc,如帮助中所述。这可能看起来有点像:

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

这样您就不必担心转义任何字符。

于 2011-04-28T22:29:21.397 回答
0

尝试将最后一行更改为:

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

注意周围的额外引号dnetdir

于 2011-04-28T21:45:12.957 回答