Matlab`mcc`:编译可执行文件时要包含的所有m文件?

时间:2018-06-21 18:31:58

标签: matlab mcc

我有一个Matlab脚本go.m,用于创建自定义对象并运行 一整套模拟。有兴趣将其移植到 Matlab许可证很少的另一个网络。我们的 策略是将脚本编译成独立的* .exe 这样它就可以在不使用许可证的情况下运行。一旦我想通 竭尽全力,将安装Matlab编译器运行时 在目标系统上。

我设法使用命令行mcc来编译TMW在线示例, magicsquare。 使用cygwin的重击:

$ cd ~/bin
$ ln -s "/c/Program Files/MATLAB/Single_R2015b/bin/mcc.bat" mcc
$ cd ~/tmp/magicSqr
$ mcc -m magicsquare.m
    # startup.m messages indicate that this launches Matlab
$ ./magicsquare.exe 5
Running C:\cygwin64\tmp\User.Name\mcrCache9.0\magics1\Users\User.Name\Documents\MATLAB\startup
m =  17  24   1   8  15
     23   5   7  14  16
      4   6  13  20  22
     10  12  19  21   3
     11  18  25   2   9

目录规范.和文件扩展名.exe 是必需的。

我的下一步是将成熟的go.m推入 过程,看看有什么坏处,并找到最轻松的方法来应对 它。至少,繁琐的工作是指需要最少代码的策略 修改,以便我不维护单独的代码库 开发与移植到目的地。

mcc编译有效:mcc -m go.m。运行*.exe 但是,该文件在第一条可执行语句中导致损坏: profile off。就像我说的那样,在战术上进行个人编码 非常难吃,所以我寻找一种识别所有文件的方法 在运行mcc时包含在内。 inmem and requiredFilesAndProducts是两个有前途的潜在客户。 但是,以上网页也警告:

  

请勿使用依赖性报告来确定哪个MATLAB代码   文件,其他人需要运行特定文件。而是使用   matlab.codetools.requiredFilesAndProducts函数。

似乎应该避免的依赖性报告是指 inmem输出的 mfiles 。这是通过检查来证实的 所说的m文件-列表非常长,并且包含函数 甚至混淆了Matlab的which命令:

>> which matricize
'matricize' not found.

识别m文件包括的唯一其他候选者是 requiredFilesAndProducts fList 输出。它似乎包括 我的自定义类的所有方法以及所有调用的m文件 居住在c:\Users\User.Name\Documents\MATLAB\(唯一 自定义文件夹)。但是,它当然不包括 导致上述错误的profile命令。

识别所有m文件和/或文件夹的最佳方法是什么 其中mcc?然后处理剩余的东西是否合理 使用条件执行(例如if ~isdeployed; <...problematic statements...>; end)引起错误的语句?

1 个答案:

答案 0 :(得分:1)

您可以参考此处的文档页面上的列表,以获取有关不支持使用MATLAB Compiler和MATLAB Compiler SDK产品进行编译的函数的信息: https://www.mathworks.com/help/compiler/unsupported-functions.html

以下页面还显示了每个单独的工具箱与MATLAB编译器的兼容性: https://www.mathworks.com/products/compiler/supported/compiler_support.html