写可部署MATLAB代码
以MATLAB的打包和部署®代码,代码必须遵循一定的准则,以避免错误。您可以实现应用程序访问部署MATLAB代码使用api生成的MATLAB函数。
接受文件类型的包装
有效和无效的文件类型的包装使用部署应用程序如下:
目标应用程序 | 有效的文件类型 | 无效的文件类型 |
---|---|---|
独立应用程序 |
MATLAB墨西哥人文件,MATLAB脚本,MATLAB函数和MATLAB类文件。这些文件必须有一个单一的入口点。 |
保护功能文件( |
库的编译器 |
MATLAB墨西哥人文件,MATLAB函数和MATLAB类文件。这些文件必须有一个单一的入口点。 |
MATLAB脚本,保护功能文件( |
MATLAB生产服务器 |
MATLAB墨西哥人文件和MATLAB函数。这些文件必须有一个单一的入口点。 |
MATLAB脚本,MATLAB类文件,保护功能文件( |
打包的应用程序没有过程MATLAB文件在运行时
编译器保证代码对未经授权的更改。可部署的MATLAB文件暂停或冻结在编译的时间。这并不意味着你不能部署一个灵活的,它意味着你必须设计您的应用程序的灵活性。如果你想让最终用户能够选择两种不同的方法,例如,这两种方法都必须在部署归档文件可用。
MATLAB运行时只能在MATLAB代码加密部署归档文件。任何函数或过程,动态生成新的MATLAB代码将不会工作MATLAB运行时。
一些MATLAB工具箱,如深度学习工具箱™产品,动态生成MATLAB代码。因为MATLAB运行时只有执行加密MATLAB文件和深度学习MATLAB工具箱生成加密文件,深度学习工具箱中的一些功能不能部署。
类似地,函数,需要检查一个MATLAB函数文件的内容不能被部署。帮助
例如,是动态的,在部署模式。您可以使用LOADLIBRARY
在部署模式如果你为它提供一个MATLAB函数原型。
而不是编译生成MATLAB代码的功能和试图部署,执行以下任务:
在MATLAB运行代码一次获得你的生成函数。
包的MATLAB代码,包括生成的函数。
提示
另一种替代方法使用EVAL
或函数宏指令
使用匿名函数处理。
如果您需要能够创建MATLAB代码动态运行时处理,最终用户必须安装一个MATLAB的副本。
得到你想要的适当的许可证工具箱功能部署
你必须有一个有效的MathWorks®许可你使用工具箱来创建可部署的MATLAB代码。您的最终用户不需要任何许可运行工具箱包装代码。
使用isdeployed函数来执行特定于部署的代码路径
的isdeployed
函数允许您指定你的MATLAB代码部署的一部分,并不是。这些规范最小化你的编译错误并帮助创建更高效,可维护的代码。
例如,你发现它不可避免的使用目录
当你写startup.m
。使用ismcc
和isdeployed
时,您指定是什么包装和执行。
如果~ (ismcc | | isdeployed)目录(mypath);结束
不依赖改变目录或路径控制的执行MATLAB文件
一般来说,良好的编程实践反对重定向程序代码中的动态搜索路径。许多开发人员都容易发生这种行为,因为它模仿他们通常在命令行上执行的操作。然而,这可能导致问题当部署代码。
例如,在一个已部署的应用程序,用MATLAB和Java路径是固定的,不能改变。因此,任何试图改变这些路径(使用cd
命令或目录
命令)失败。
如果你发现你无法避免放置目录
电话在MATLAB代码中,使用ismcc
和isdeployed
。有关详细信息,请参见使用isdeployed函数来执行特定于部署的代码路径。
逐步重构应用程序依赖于Non-Deployable功能
随着时间的推移,重构、简化和模块化MATLAB代码包含non-compilable或non-deployable函数使用isdeployed
。你的最终目标是“优雅降级”non-deployable代码。换句话说,代码必须为最终用户提供尽可能少的障碍部署,直到几乎消除。
代码分割成设计时和运行时代码部分:
设计时代码是目前发展的代码。几乎所有的永久重写的代码经过一个阶段,调试和优化。在一些工具箱,深度学习工具箱等产品,经过一段时间的自我训练的代码,因为它对各种数据的排列和模式。这样的代码几乎是从来没有部署而设计的。
运行时代码,另一方面,凝固或成为稳定处于完成状态,随时可以部署到最终用户。
考虑创建一个单独的目录并不意味着部署的代码或代码调用non-deployable代码。
不创建或使用非恒量的静态变量
避免使用以下:
全局变量在MATLAB代码
mex files中的静态变量
静态变量在Java代码中
这些变量是持久的和共享的过程中的一切。
在部署应用程序时,可能会导致一些问题,因为使用持久性变量MATLAB运行时流程运行在单独的线程中。你不能加载一个以上的这些不恒定,静态变量相同的过程。此外,这些静态变量没有在多线程应用程序中工作得很好。
当对封装MATLAB编程代码时,您应该意识到的一个实例MATLAB运行时为每个实例都创建一个新类。如果同样的类被实例化使用不同的变量名,这是附加到MATLAB运行时同一个类的实例之前创建的实例。简而言之,如果一个组件包含n独特的类,将有最多n的实例MATLAB运行时,每个对应一个或多个实例创建的一个类。
如果你必须使用静态变量,将其绑定到实例。例如,定义一个Java类的实例变量比定义的变量静态
。