【问题标题】:MATLAB compiler processes mcc.enc from unrelated toolboxesMATLAB 编译器处理来自无关工具箱的 mcc.enc
【发布时间】:2012-07-19 00:03:25
【问题描述】:

我正在使用 mcc 编译我的 MATLAB 项目。我正在使用的机器上安装了许多 MATLAB 工具箱,但我的代码只需要几个(例如 distcomp 和 images)。但是,每当我运行 mcc 时,它最终都会“处理”许多工具箱的 mcc.enc 文件,包括我的代码不需要的那些。

这是 mcc 输出的开头(我使用 -R '-nodisplay' 运行它以与我正在使用的集群兼容)。

Warning: No display specified.  You will not be able to display graphics on the screen.
Compiler version: 4.15 (R2011a)
Processing /cm/shared/apps/matlab/7.12.0/toolbox/matlab/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/distcomp/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/images/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/stats/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/shared/imageslib/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/shared/system/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/shared/spcuilib/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/control/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/shared/controllib/engine/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/shared/controllib/general/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/signal/mcc.enc
Processing /cm/shared/apps/matlab/7.12.0/toolbox/nnet/mcc.enc

我注意到在我的桌面上运行 mcc 时它也会做同样的事情。其中一些 mcc.enc 文件(尤其是 .../signal/mcc.enc 和 .../nnet/mcc.enc)的处理时间比 mcc 其余部分的执行时间要长。有没有办法排除处理不需要的 mcc.enc 文件?

【问题讨论】:

    标签: matlab matlab-deployment matlab-compiler mcc


    【解决方案1】:

    使用 MATLAB IDE 中的“部署工具”,进入项目设置并从“路径上的工具箱”选项卡中取消选择所有不需要的工具箱。

    另外,还有一个 mcc 参数 -N 会清除路径中的所有文件夹,只保留核心 MATLAB 文件夹。

    -N 清除路径

    传递 -N 有效地清除所有文件夹的路径,除了 以下核心文件夹(此列表会随时间变化):

    • matlabroot/toolbox/matlab
    • matlabroot/工具箱/本地
    • matlabroot/工具箱/编译器/部署

    它还保留上述列表中出现在 编译时的 MATLAB 路径。在命令行中包含 -N 允许 您从原始路径替换文件夹,同时保留 包含文件夹的相对顺序。的所有子文件夹 还包括出现在原始路径上的包含文件夹。 此外,-N 选项保留用户拥有的所有文件夹 包含在不在 matlabroot/toolbox 下的路径中。

    【讨论】:

    • 您答案的第二部分是我正在寻找的。我无法使用 deploytool GUI,但 -N 选项允许选择性地包含 mcc.enc 文件。
    • 工具箱选项似乎在以后的版本中消失了:S
    • @ntg:GUI 部分在 R2013b 中已更改,但在deploytool 项目的设置对话框中仍有一个字段用于"Additional parameters passed to MCC";在这里,您可以使用上述标志 -N -p some_dir 来清除 MCC 路径并明确指定要考虑的工具箱。
    【解决方案2】:

    我建议使用 Matlab Central File Exchange 中的 «fdep» 函数:

    http://www.mathworks.com/matlabcentral/fileexchange/17291-fdep--a-pedestrian-function-dependencies-finder

    这个函数,应用于你程序的主要函数会告诉你你正在使用的工具箱和所有正在使用的函数(递归,所以所有的基本函数都被列出了,你不应该错过任何函数)。减少最终 exe 的大小和编译时间非常有用。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多