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

Matlab `mcc`: All m-files to include when compiling executable?

我有一个创建自定义对象和 运行s 的 Matlab 脚本 go.m 一套模拟。有兴趣将其移植到 Matlab 许可证很少的不同网络。我们的 策略是将脚本编译成独立的*.exe 这样它就可以 运行 而无需用完许可证。一旦我发现 万事俱备,Matlab Compiler Runtime 将被安装 在目标系统上。

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

$ 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。正如我所说,在个人基础上进行战术重新编码 非常难吃,所以我搜索了一种方法来识别所有文件 包括 when 运行ning mcc。两个有希望的线索是 inmemrequiredFilesAndProducts。 但是,上面的网页也警告:

Do not use the Dependency Report to determine which MATLAB code files someone else needs to run a particular file. Instead use the matlab.codetools.requiredFilesAndProducts function.

出现要避免的依赖关系报告指的是 mfilesinmem 输出。这通过检查得到证实 说的 m 文件——列表非常长,并且包含函数 连 Matlab 的 which 命令都弄糊涂了:

>> which matricize
'matricize' not found.

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

识别所有 m 文件 and/or 文件夹的最佳方法是什么 mcc?然后治疗任何剩余的是否合理 使用条件执行的错误语句,例如 if ~isdeployed; <...problematic statements...>; end?

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

下面的这一页还展示了与 MATLAB Compiler 与各个工具箱的兼容性: https://www.mathworks.com/products/compiler/supported/compiler_support.html