主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

compiler.build.standaloneApplication

MATLAB 外部的部署创建独立应用程序

说明

compiler.build.standaloneApplication(AppFile) 使用 MATLAB® 函数、类或由 AppFile 指定的 App 创建可部署独立应用程序。可执行文件类型由您的操作系统而定。生成的可执行文件不包括 MATLAB Runtime 或安装程序。

示例

compiler.build.standaloneApplication(AppFile,Name,Value) 使用由一个或多个名称-值参量指定的额外选项创建独立应用程序。选项包括可执行文件名称、帮助文本和图标图像。

示例

compiler.build.standaloneApplication(opts) 使用由 compiler.build.StandaloneApplicationOptions 对象 opts 指定的额外选项创建独立应用程序。不能使用名称-值参量指定任何其他选项。

示例

results = compiler.build.standaloneApplication(___) 使用以上语法中的任意参量组合以 compiler.build.Results 对象形式返回编译信息。编译信息包括编译类型、编译文件的路径以及编译选项。

示例

示例

全部折叠

使用生成幻方的函数文件创建独立应用程序。

在 MATLAB 中,找到要部署为独立应用程序的 MATLAB 代码。对于此示例,使用文件 magicsquare.m 进行编译。

appFile = fullfile(which('magicsquare.m'));

使用 compiler.build.standaloneApplication 命令编译独立应用程序。

compiler.build.standaloneApplication(appFile);

此语法会在当前工作目录中名为 magicsquarestandaloneApplication 的文件夹下生成以下文件:

  • includedSupportPackages.txt - 列出应用程序中包含的所有支持文件的文本文件。

  • magicsquare.exemagicsquare - 扩展名为 .exe(如果在 Windows® 系统上编译)或没有扩展名(如果在 Linux®macOS 系统上编译)的可执行文件。

  • run_magicsquare.sh - 设置库路径并执行应用程序的 shell 脚本文件。此文件仅在 Linux 和 macOS 系统上生成。

  • mccExcludedFiles.log - 包含应用程序中未包含的任何工具箱函数列表的日志文件。有关不支持的函数的信息,请参阅 MATLAB Compiler 限制

  • readme.txt - 包含有关部署前提条件的信息以及要打包以进行部署的文件列表的文本文件。

  • requiredMCRProducts.txt - 包含 MATLAB Runtime 运行应用程序所需产品的产品 ID 的文本文件。

  • unresolvedSymbols.txt - 包含有关未解析符号的信息的文本文件。

要使用输入参量 4 从 MATLAB 中运行 magicsquare,请导航到 magicsquarestandaloneApplication 文件夹,然后根据您的操作系统执行以下命令之一:

操作系统在 MATLAB 命令窗口中测试
Windows!magicsquare 4
macOSsystem(['./run_magicsquare.sh ',matlabroot,' 4']);
Linux!./magicsquare 4

该应用程序会输出一个 4×4 幻方。

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

要在 MATLAB 之外运行独立应用程序,请参阅运行独立应用程序

创建一个独立应用程序并使用名称-值参量对它进行自定义。

编写一个 MATLAB 函数,该函数使用一个子函数来计算幻方的对角线分量。将这些函数保存在名为 mymagicdiag.mmydiag.m 的文件中。

function out = mymagicdiag(in)
X = magic(in);
out = mydiag(X);
function out = mydiag(in)
out = [diag(in)]';

使用 mymagicdiag.m 编译独立应用程序。使用名称-值对组参量指定可执行文件的名称,添加 mydiag.m 函数文件,并将命令行输入解释为双精度数值。

compiler.build.standaloneApplication('mymagicdiag.m', ...
'ExecutableName','MagicDiagApp', ...
'AdditionalFiles','mydiag.m', ...
'TreatInputsAsNumeric','On')

要使用输入参量 4 从 MATLAB 中运行 MagicDiagApp,请导航到 MagicDiagAppstandaloneApplication 文件夹,然后根据您的操作系统执行以下命令之一:

操作系统在 MATLAB 命令窗口中测试
Windows!MagicDiagApp 4
macOSsystem(['./run_MagicDiagApp.sh ',matlabroot,' 4']);
Linux!./MagicDiagApp 4

该应用程序输出一个 4x4 幻方的对角线条目。

    16     11     6    1

使用 compiler.build.StandaloneApplicationOptions 对象在 Windows 系统上创建多个独立应用程序。

使用 magicsquare.m 文件创建独立应用程序。

appFile = fullfile(which('magicsquare'));

使用 appFile 创建一个 StandaloneApplicationOptions 对象。使用名称-值参量指定一个共用输出目录,将命令行输入解释为双精度数值,并在编译过程中显示进度信息。

opts = compiler.build.StandaloneApplicationOptions(appFile,...
    'OutputDir','D:\Documents\MATLAB\work\MagicBatch',...
    'TreatInputsAsNumeric','On',...
    'Verbose','On')
opts =

  StandaloneApplicationOptions with properties:

            CustomHelpTextFile: ''
              EmbedArchive: on
            ExecutableIcon: 'C:\Program Files\MATLAB\R2025a\toolbox\compiler\packagingResources\default_icon_48.png'
            ExecutableName: 'magicsquare'
    ExecutableSplashScreen: 'C:\Program Files\MATLAB\R2025a\toolbox\compiler\packagingResources\default_splash.png'
         ExecutableVersion: '1.0.0.0'
                   AppFile: 'C:\Program Files\MATLAB\R2025a\extern\examples\compiler\magicsquare.m'
      TreatInputsAsNumeric: on
           AdditionalFiles: {}
       AutoDetectDataFiles: on
     ExternalEncryptionKey: [0×0 struct]
          ObfuscateArchive: off
           SecretsManifest: ''
           SupportPackages: {'autodetect'}
                   Verbose: on
                 OutputDir: 'D:\Documents\MATLAB\work\MagicBatch'

通过将 StandaloneApplicationOptions 对象作为输入传递给编译函数来编译独立应用程序。

compiler.build.standaloneApplication(opts);

要使用具有相同选项的函数文件 example2.m 来创建新的独立应用程序,在再次运行编译函数之前,请使用圆点表示法修改现有 StandaloneApplicationOptions 对象的 AppFile

opts.AppFile = 'example2.m';
compiler.build.standaloneApplication(opts);

通过修改 AppFile 参量并重新编译,您可以使用同一个选项对象创建多个应用程序。

创建一个独立应用程序,并将有关编译类型、生成的文件、包含的支持包和编译选项的信息保存到 compiler.build.Results 对象中。

使用文件 magicsquare.m 进行编译。

results = compiler.build.standaloneApplication('magicsquare.m')
results = 

              BuildType: 'standaloneApplication'
                  Files: {2×1 cell}
IncludedSupportPackages: {}
                Options: [1×1 compiler.build.StandaloneApplicationOptions]   
    RuntimeDependencies: [1×1 compiler.runtime.Dependencies]

Files 属性包含 magicsquare 独立可执行文件和 readme.txt 文件的路径。

输入参数

全部折叠

用于编译应用程序的主文件的路径,指定为行字符向量或字符串标量。该文件必须是 MATLAB 函数、类或以下类型之一的 App:.m.p.mlx.mlapp 或者有效的 MEX 文件。

示例: 'mymagic.m'

数据类型: char | string

独立应用程序编译选项,指定为 compiler.build.StandaloneApplicationOptions 对象。

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: OutputDir='D:\work\myproject'

要包含在独立应用程序中的其他文件和文件夹,指定为字符向量、字符串标量、字符串数组或字符向量元胞数组。路径可以是相对于当前工作目录的路径,也可以是绝对路径。

示例: 'AdditionalFiles',["myvars.mat","myfunc.m"]

数据类型: char | string | cell

自动包含数据文件的标志,指定为 'on''off',或者指定为数值或逻辑 1 (true) 或 0 (false)。值 'on' 等效于 true,值 'off' 等效于 false。因此,可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

  • 如果将此属性设置为 'on',则您提供的作为特定函数(例如 loadfopen)的输入的数据文件将自动包含在独立应用程序中。这是默认行为。

  • 如果将此属性设置为 'off',则必须使用 AdditionalFiles 属性将数据文件添加到应用程序中。

示例: 'AutoDetectDataFiles','Off'

数据类型: logical

包含面向应用程序最终用户的帮助文本的帮助文件的路径,指定为字符向量或字符串标量。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。

示例: 'CustomHelpTextFile','D:\Documents\MATLAB\work\help.txt'

数据类型: char | string

嵌入可部署存档的标志,指定为 'on''off',或指定为数值或逻辑 1 (true) 或 0 (false)。值 'on' 等效于 true,值 'off' 等效于 false。因此,可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

  • 如果将此属性设置为 'on',则此函数会将存档嵌入在可部署可执行文件中。

  • 如果将此属性设置为 'off',则此函数会将可部署存档生成为单独的文件。

示例: 'EmbedArchive','Off'

数据类型: logical

图标图像的路径,指定为字符向量或字符串标量。该图像用作独立可执行文件的图标。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。接受的图像类型为.jpg.jpeg.png.bmp.gif

默认路径为:

'matlabroot\toolbox\compiler\packagingResources\default_icon_48.png'

示例: 'ExecutableIcon','D:\Documents\MATLAB\work\images\myIcon.png'

数据类型: char | string

生成的应用程序的名称,指定为字符向量或字符串标量。默认值是 AppFile 的文件名。目标输出名称必须以字母或下划线字符开头,并且只能包含字母数字字符或下划线。

示例: 'ExecutableName','MagicSquare'

数据类型: char | string

启动画面图像的路径,指定为字符向量或字符串标量。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。接受的图像类型为.jpg.jpeg.png.bmp.gif。图像大小调整为 400 像素 x 400 像素。

默认路径为:

'matlabroot\toolbox\compiler\packagingResources\default_splash.png'

注意

这仅用于使用 compiler.build.standaloneWindowsApplication 编译的 Windows 应用程序。

示例: 'ExecutableSplashScreen','D:\Documents\MATLAB\work\images\mySplash.png'

数据类型: char | string

可执行文件版本,指定为字符向量或字符串标量。

注意

这仅适用于 Windows 操作系统。

示例: 'ExecutableVersion','4.0'

数据类型: char | string

自 R2024b 起

外部 AES 加密密钥和 MEX 密钥加载程序文件的路径,指定为标量结构体,其中恰好有两个分别名为 EncryptionKeyFileRuntimeKeyLoaderFile 的行字符向量或字符串标量字段。两个结构体字段都是必需的。文件路径可以是相对于当前工作目录的路径,也可以是绝对路径。

例如,使用结构体 keyValueStruct 将加密密钥指定为 encrypt.key,将加载程序文件指定为 loader.mexw64

keyValueStruct.EncryptionKeyFile='encrypt.key'; keyValueStruct.RuntimeKeyLoaderFile='loader.mexw64'

加密密钥文件必须采用以下受支持的格式之一:

  • 二进制 256 位 AES 密钥,文件大小为 32 字节

  • 十六进制编码的 AES 密钥,文件大小为 64 字节

MEX 文件加载程序在运行时检索解密密钥,并且必须是具有以下参量的接口:

  • prhs[0] - 输入,指定为静态值 'get' 的字符数组

  • prhs[1] - 输入,指定为 CTF 组件 UUID 的字符数组

  • plhs[0] - 输出,32 字节 UINT8 数字数组或 64 字节十六进制编码字符数组,具体取决于密钥格式

请勿在多个 CTF 之间共享同一个密钥。

示例: 'ExternalEncryptionKey',keyValueStruct

数据类型: struct

混淆可部署存档的标志,指定为 'on'/1/true'off'/0/false。该值存储为 matlab.lang.onoffSwitchState 类型的 on/off 逻辑值。

如果将此属性设置为 'on',则会对最终用户混淆可部署存档中的文件夹结构和文件名,并且 .m.mlapp.p.mat、MLX 文件、SFX 文件和 MEX 文件中包含的用户代码和数据将被放入存档内的用户包中。另外,所有 .m 文件在打包前会转换为 P 文件。

在运行时,系统会从用户包直接解密和加载 MATLAB 代码和数据,而不是将其提取到文件系统。在加载之前,系统会从用户包中临时提取 MEX 文件。

要在用户包中手动包含其他文件类型,请将每种文件类型以单独的扩展标记的形式添加到文件 matlabroot/toolbox/compiler/advanced_package_supported_files.xml 中。

以下内容受支持:

  • ver 函数

  • 调用外部库,例如 DLL

  • 进程外 MATLAB Runtime(用于 MATLAB Data Array 的 C++ 共享库)

  • 进程外 MEX 文件执行(mexhostfevalmatlab.mex.MexHost

  • 在 R2023b 之前的版本中: v7.3 之外的 .mat 文件

启用此选项等效于在指定了 -j-s 的情况下使用 mcc

如果将此属性设置为 'off',则不会混淆可部署存档。这是默认行为。

示例: 'ObfuscateArchive','on'

数据类型: logical

保存编译文件的输出目录的路径,指定为字符向量或字符串标量。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。

编译文件夹的默认名称是可执行文件名称后跟 standaloneApplication

示例: 'OutputDir','D:\Documents\MATLAB\work\MagicSquarestandaloneApplication'

数据类型: char | string

自 R2024b 起

机密清单 JSON 文件的路径,该文件指定要嵌入在可部署存档中的密钥,指定为字符向量或字符串标量。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。

如果您的 MATLAB 代码调用 getSecretgetSecretMetadataisSecret 函数,您必须在 JSON 机密清单文件中指定要嵌入可部署存档的密钥。如果您的代码调用 getSecret 并且您未指定 SecretsManifest 选项,则 MATLABCompiler™ 会发出警告,并在名为 <component_name>_secrets_manifest.json 的输出文件夹中生成一个模板 JSON 文件。通过在嵌入字段中指定密钥名称来修改此文件。

setSecret 函数不可部署。要将密钥嵌入在可部署存档中,您必须在构建存档之前在 MATLAB 中调用 setSecret

有关使用密钥进行部署的更多信息,请参阅处理已部署应用程序中的敏感信息

示例: 'SecretsManifest','D:\Documents\MATLAB\work\mycomponent\mycomponent_secrets_manifest.json'

数据类型: char | string

要包含的支持包,指定为以下选项之一:

  • 'autodetect'(默认值)- 依赖关系分析过程会自动检测并包含所需的支持包。

  • 'none' - 不包括任何支持包。使用此选项可能会导致运行时错误。

  • 字符串标量、字符向量或字符向量元胞数组 - 仅包含指定的支持包。要列出已安装的支持包或特定文件使用的那些支持包,请参阅 compiler.codetools.deployableSupportPackages

示例: 'SupportPackages',{'Deep Learning Toolbox Converter for TensorFlow Models','Deep Learning Toolbox Model for Places365-GoogLeNet Network'}

数据类型: char | string | cell

将命令行输入解释为数值的标志,指定为 'on''off',或指定为数值或逻辑 1 (true) 或 0 (false)。值 'on' 等效于 true,值 'off' 等效于 false。因此,可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

  • 如果将此属性设置为 'on',则命令行输入会被视为 MATLAB 双精度数值。

  • 如果将此属性设置为 'off',则命令行输入会被视为 MATLAB 字符向量。这是默认行为。

示例: 'TreatInputsAsNumeric','on'

数据类型: logical

控制编译详细程度的标志,指定为 'on''off',或者指定为数值或逻辑 1 (true) 或 0 (false)。值 'on' 等效于 true,值 'off' 等效于 false。因此,可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

  • 如果将此属性设置为 'on',则 MATLAB 命令窗口会显示进度信息,指示编译过程期间的编译器输出。

  • 如果将此属性设置为 'off',则命令窗口不会显示进度信息。这是默认行为。

示例: 'Verbose','on'

数据类型: logical

输出参量

全部折叠

编译结果,以 compiler.build.Results 对象形式返回。Results 对象包含:

  • 编译类型,即 'standaloneApplication'

  • 编译文件的路径

  • 包含的支持包的列表

  • 编译选项,指定为 StandaloneApplicationOptions 对象

  • 必需和可选依赖项的列表,指定为 Dependencies 对象

提示

  • 要从系统命令提示符使用此函数创建独立应用程序,请使用 matlab 函数并指定 -batch 选项。例如:

    matlab -batch compiler.build.standaloneApplication('mymagic.m')

版本历史记录

在 R2020b 中推出

全部展开