主要内容

写可部署MATLAB代码

打包的应用程序没有过程MATLAB文件在运行时

编译器保证代码对未经授权的更改。可部署的MATLAB®文件被暂停或冻结在编译的时间。这并不意味着你不能部署一个灵活的,它意味着你必须设计您的应用程序的灵活性。如果你想让最终用户能够选择两种不同的方法,例如,这两种方法都必须在部署归档文件可用。

MATLAB运行时只能在MATLAB代码加密部署归档文件。任何函数或过程,动态生成新的MATLAB代码将不会工作MATLAB运行时

一些MATLAB工具箱,如深度学习工具箱™产品,动态生成MATLAB代码。因为MATLAB运行时只有执行加密MATLAB文件和深度学习MATLAB工具箱生成加密文件,深度学习工具箱中的一些功能不能部署。

类似地,函数,需要检查一个MATLAB函数文件的内容不能被部署。帮助例如,是动态的,在部署模式。您可以使用LOADLIBRARY在部署模式如果你为它提供一个MATLAB函数原型。

而不是编译生成MATLAB代码的功能和试图部署,执行以下任务:

  1. 在MATLAB运行代码一次获得你的生成函数。

  2. 包的MATLAB代码,包括生成的函数。

提示

另一种替代方法使用EVAL函数宏指令使用匿名函数处理。

如果您需要能够创建MATLAB代码动态运行时处理,最终用户必须安装一个MATLAB的副本。

不依赖改变目录或路径控制的执行MATLAB文件

一般来说,良好的编程实践反对重定向程序代码中的动态搜索路径。许多开发人员都容易发生这种行为,因为它模仿他们通常在命令行上执行的操作。然而,这可能导致问题当部署代码。

例如,在一个已部署的应用程序,用MATLAB和Java®路径是固定的,不能改变。因此,任何试图改变这些路径(使用cd命令或目录命令)失败。

如果你发现你无法避免放置目录电话在MATLAB代码中,使用ismccisdeployed。看到使用isdeployed函数来执行特定于部署的代码路径获取详细信息。

使用isdeployed函数来执行特定于部署的代码路径

isdeployed函数允许您指定你的MATLAB代码部署的一部分,并不是。这些规范最小化你的编译错误并帮助创建更高效,可维护的代码。

例如,你发现它不可避免的使用目录当你写startup.m。使用ismccisdeployed时,您指定是什么包装和执行。

如果~ (ismcc | | isdeployed)目录(mypath);结束

逐步重构应用程序依赖于Noncompilable功能

随着时间的推移,重构、简化和模块化MATLAB代码包含non-compilable或non-deployable函数使用isdeployed。你的最终目标是“优雅降级”non-deployable代码。换句话说,代码必须为最终用户提供尽可能少的障碍部署,直到几乎消除。

代码分割成设计时和运行时代码部分:

  • 设计时代码是目前发展的代码。几乎所有的永久重写的代码经过一个阶段,调试和优化。在一些工具箱,深度学习工具箱等产品,经过一段时间的自我训练的代码,因为它对各种数据的排列和模式。这样的代码几乎是从来没有部署而设计的。

  • 运行时代码,另一方面,凝固或成为稳定处于完成状态,随时可以部署到最终用户。

考虑创建一个单独的目录并不意味着部署的代码或代码调用undeployable代码。

不创建或使用非恒量的静态变量

避免使用以下:

  • 全局变量在MATLAB代码

  • mex files中的静态变量

  • 静态变量在Java代码中

这些变量是持久的和共享的过程中的一切。

在部署应用程序时,可能会导致一些问题,因为使用持久性变量MATLAB运行时流程运行在单独的线程中。你不能加载一个以上的这些不恒定,静态变量相同的过程。此外,这些静态变量没有在多线程应用程序中工作得很好。

当对封装MATLAB编程代码时,您应该意识到的一个实例MATLAB运行时为每个实例都创建一个新类。如果同样的类被实例化使用不同的变量名,这是附加到MATLAB运行时同一个类的实例之前创建的实例。简而言之,如果一个组件包含n独特的类,将有最多n的实例MATLAB运行时,每个对应一个或多个实例创建的一个类。

如果你必须使用静态变量,将其绑定到实例。例如,定义一个Java类的实例变量比定义的变量静态

得到你想要的适当的许可证工具箱功能部署

你必须有一个有效的MathWorks®许可你使用工具箱来创建可部署的MATLAB代码。

另请参阅

|

相关的话题