主要内容

mcc

编译要部署的 MATLAB 函数

说明

您可以使用 mcc 将 MATLAB® 程序打包并部署为独立应用程序、Excel® 加载项、Spark™ 应用程序或 Hadoop® 作业。

如果您拥有 MATLAB Compiler SDK™ 许可证,则可以使用 mccMATLAB Production Server™ 创建 C/C++ 共享库、.NET 程序集、Java® 包、Python® 包、MATLAB Production Server 可部署存档或 Excel 加载项。

一般用法

mcc [options] mfilename1 mfilename2 ... mfilenameN 按照选项指定的方式编译函数。使用的选项取决于预期的编译结果。第一个文件用作编译工件的入口。

您也可以从系统命令提示符调用此语法。

注意

包含特殊字符(例如句点或空格)的参量必须用单引号引起来。从 Windows® 命令提示符执行时使用双引号。

mcc(options,mfilename) 按照选项指定的方式编译函数。将文件名和选项指定为字符向量或字符串。此语法允许您使用 MATLAB 变量作为输入参量。

独立应用程序

mcc -m [options] mfilename 将函数编译为独立应用程序。可执行文件类型由您的操作系统而定。

作为替代方案,compiler.build.standaloneApplication 函数支持大多数常见的工作流。

示例

mcc -e [options] mfilename 将函数编译为独立应用程序,该应用程序在执行时不会打开 Windows 命令提示符。-e 选项仅适用于 Windows 操作系统。

作为替代方案,compiler.build.standaloneWindowsApplication 函数支持大多数常见的工作流。

示例

Excel 加载项

mcc -W 'excel:addin_name,class_name,version=version_number' [options] mfilename1 mfilename2 ... mfilenameN 使用指定的文件创建 Microsoft® Excel 加载项。在创建 Excel 加载项之前,请安装支持的编译器

您只能在 Windows 上创建 Excel 加载项。

  • addin_name - 指定加载项的名称。如果您不指定名称,则 mcc 使用 mfilename1 作为默认值。

  • class_name - 指定要创建的类的名称。如果您不指定类名,则 mcc 使用 addin_name 作为类名。如果指定,则 class_name 不能与 mfilename1 相同。

  • version_number - 将加载项文件的版本号指定为文件系统中的 major.minor.bug.build。您不需要指定版本号。如果您不指定版本号,mcc 默认将版本号设置为 1.0.0.0

    • major - 指定主版本号。如果您未指定数字,mcc 会将 major 设置为 1

    • minor - 指定次要版本号。如果您未指定数字,mcc 会将 minor 设置为 0

    • bug - 指定 bug 修复维护版本号。如果您未指定数字,mcc 会将 bug 设置为 0

    • build - 指定内部版本号。如果您未指定数字,mcc 会将 build 设置为 0

作为替代方案,compiler.build.excelAddIn 函数支持大多数常见的工作流。

示例

Hadoop 上的 MapReduce 应用程序

仅限 Linux®

mcc -W 'hadoop:archive_name,CONFIG:config_file' mfilenamemfilename 生成一个可部署存档,该存档可由 Hadoop 作为作业运行。

示例

Simulink 仿真

需要 Simulink® Compiler™

mcc -m [options] mfilename 将包含 Simulink 仿真的 MATLAB 应用程序编译为独立应用程序。有关详细信息,请参阅Create and Deploy a Script with Simulink Compiler (Simulink Compiler)

示例

Python

需要 MATLAB Compiler SDK

mcc -W python:package_name [options] mfilename1 mfilename2 ... mfilenameN 使用指定的文件创建一个 Python 包。

  • package_name - 指定以可选命名空间开头的 Python 包的名称,它是一个以句点分隔的列表,例如 companyname.groupname.component

作为替代方案,compiler.build.pythonPackage (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

示例

.NET 程序集

需要 MATLAB Compiler SDK

mcc -W 'dotnet:assembly_name,api=api_type,class_name,framework_version,security,remote_type' [options] mfilename1 mfilename2 ... mfilenameN 使用指定的文件创建一个具有单个类的 .NET 程序集。创建 .NET 程序集之前,请参阅MATLAB Compiler SDK .NET 目标要求 (MATLAB Compiler SDK)

  • assembly_name - 指定以可选命名空间开头的程序集的名称,它是一个以句点分隔的列表,例如 companyname.groupname.component

  • api_type - 指定程序集的 API 类型。值为 matlab-datamwarray。默认值为 mwarray

  • class_name - 指定要创建的 .NET 类的名称。

  • framework_version - 指定要用于编译程序集的 Microsoft .NET Framework 的版本。指定以下两个选项之一:

    • 0.0 - 在目标计算机上使用支持的最新版本。

    • version_major.version_minor - 使用框架的特定版本。

    功能通常特定于版本。请参阅与您要实现的功能相关的文档,以了解 Microsoft .NET Framework 的版本要求。

  • security - 指定要创建的程序集是私有程序集还是共享程序集。

    • 要创建私有程序集,请指定 Private

    • 要创建共享程序集,请指定用于对该程序集签名的加密密钥文件的完整路径。

  • remote_type - 指定程序集的远程类型。值为 remotelocal

示例

mcc -W 'dotnet:assembly_name,api=api_type,class_name,framework_version,security,remote_type' [options] 'class{class_name:mfilename1,mfilename2,...,mfilenameN}' 使用指定的文件创建一个具有多个类的 .NET 程序集。您可以通过添加 class{___} 参量来包含其他类设定符。

作为替代方案,compiler.build.dotNETAssembly (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

Java

需要 MATLAB Compiler SDK

mcc -W 'java:package_name,class_name' [options] mfilename1 mfilename2 ... mfilenameN 从指定的文件创建一个 Java 包。创建 Java 包之前,请参阅配置您的 Java 环境 (MATLAB Compiler SDK)

  • package_name - 指定以可选命名空间开头的 Java 包的名称,它是一个以句点分隔的列表,例如 companyname.groupname.component

  • class_name - 指定要创建的类的名称。如果您未指定类名,mcc 使用 package_name 中的最后一项。

示例

mcc -W 'java:package_name,class_name' [options] 'class{class_name:mfilename1,mfilename2,...,mfilenameN}' 使用指定的文件创建一个具有多个类的 Java 包。您可以通过添加 class{___} 参量来包含其他类设定符。

作为替代方案,compiler.build.javaPackage (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

C 共享库

需要 MATLAB Compiler SDK

mcc -l [options] mfilename1 mfilename2 ... mfilenameN 将列出的函数编译成 C 共享库并生成 C 包装器代码,以与其他应用程序集成。

作为替代方案,compiler.build.cSharedLibrary (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

示例

C++ 共享库

需要 MATLAB Compiler SDK

mcc -W 'cpplib:library_name[,{all|legacy|generic}]' [options] mfilename1 mfilename2 ... mfilenameN 将列出的函数编译成 C++ 共享库并生成 C++ 包装器代码,以与其他应用程序集成。

  • library_name - 指定共享库的名称。

  • all - 通过 mwArray API 和使用 MATLAB Data API 的通用接口生成共享库。这是默认行为。

  • legacy - 使用 mwArray API 生成共享库。

  • generic - 使用 MATLAB Data API 生成共享库。

作为替代方案,compiler.build.cppSharedLibrary (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

示例

COM 组件

需要 MATLAB Compiler SDK

mcc -W 'com:component_name,class_name' [options] mfilename1 mfilename2 ... mfilenameN 将列出的函数编译为通用的 Microsoft COM 组件。

  • component_name - 指定 COM 组件的名称。

  • class_name - 指定类的名称。

作为替代方案,compiler.build.comComponent (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

示例

mcc -W 'com:component_name,class_name' [options] 'class{class_name:mfilename1,mfilename2,...,mfilenameN}' 使用指定的文件创建一个具有多个类的 Microsoft COM 组件。您可以通过添加 class{___} 参量来包含其他类设定符。

MATLAB Production Server 的可部署存档

需要 MATLAB Compiler SDK

mcc -U -W 'CTF:archive_name[,DISCOVERY:FunctionSignatures.json][,ROUTES:ArchiveRoutes.json]' [options] mfilename1 mfilename2 ... mfilenameN 创建一个可部署存档(.ctf 文件),以供 MATLAB Production Server 实例使用。

  • archive_name - 指定可部署存档的名称。

  • FunctionSignatures.json - 指定包含有关 MATLAB 函数的信息的 JSON 文件,指定为绝对路径或相对路径。此选项仅适用于使用发现 API 的 RESTful 客户端。有关详细信息,请参阅JSON 中的 MATLAB 函数签名 (MATLAB Production Server)

  • ArchiveRoutes.json - 指定包含 URL 路由的 JSON 文件,这些路由将客户端请求映射到存档内的 MATLAB Web 处理程序函数。使用此选项可以按可部署存档名称组织路由,而不是在 routes-file (MATLAB Production Server) 服务器配置属性指定的服务器级路由文件中定义它们。有关 Web 请求处理程序的详细信息,请参阅处理 HTTP 请求中的自定义路由和负载 (MATLAB Production Server)

该语法还为 Microsoft Excel 加载项创建服务器端可部署存档(.ctf 文件)。

作为替代方案,compiler.build.productionServerArchive (MATLAB Compiler SDK) 函数支持大多数常见的工作流,但不支持创建特定于存档的路由。

示例

用于 MATLAB Production ServerExcel 加载项

需要 MATLAB Compiler SDK

mcc -W 'mpsxl:addin_name,class_name,version' input_marshaling_flags output_marshaling_flags [options] mfilename1 mfilename2 ... mfilenameN 使用指定的文件创建客户端 Microsoft Excel 加载项,该加载项可用于从 Excel 向 MATLAB Production Server 发送请求。创建客户端加载项之前,必须先使用指定的文件创建服务器端可部署存档(.ctf 文件)。纯客户端加载项是不可行的。

  • addin_name - 指定加载项的名称。

  • class_name - 指定要创建的类的名称。如果您不指定类名,mcc 使用 addin_name 作为默认值。

  • version - 指定加载项的版本,以 major . minor 形式指定。

    • major - 指定主版本号。如果您未指定版本号,mcc 使用最新版本。

    • minor - 指定次要版本号。如果您未指定版本号,mcc 使用最新版本。

  • input_marshaling_flags - 指定如何在 Microsoft Excel 和 MATLAB 之间编组数据的选项。

    • -replaceBlankWithNaN - 指定将 Microsoft Excel 中的空白编组为 MATLAB 中的 NaN。如果您不指定此标志,则空白将被编组为 0。

    • -convertDateToString - 指定将 Microsoft Excel 中的日期编组为 MATLAB 字符向量。如果您不指定此标志,则日期将被编组为 MATLAB 双精度值。

  • output_marshaling_flags - 指定如何在 MATLAB 和 Microsoft Excel 之间编组数据的选项。

    • -replaceNaNWithZero - 指定将 MATLAB 中的 NaN 编组为 Microsoft Excel 中的 0。如果您不指定此标志,NaN 将被编组为 Visual Basic® 中的 #QNAN

    • -convertNumericToDate - 指定将 MATLAB 数值编组为 Microsoft Excel 日期。如果您不指定此标志,Microsoft Excel 将不会接收日期作为输出。

作为替代方案,compiler.build.excelClientForProductionServer (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

示例

示例

全部折叠

创建一个独立应用程序并包含数据文件 data.mat

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

appFile = fullfile(matlabroot,'extern','examples','compiler','magicsquare.m');

使用 MATLAB 命令语法构建一个引用 appFile 的独立应用程序。在 MATLAB 命令提示符下使用此命令。

mcc('-m',appFile,'-a','data.mat','-v')

该函数生成一个名为 magicsquare 独立应用程序。可执行文件类型取决于创建应用程序所基于的操作系统。

作为替代方案,compiler.build.standaloneApplication 函数支持大多数常见的工作流。

在 Windows 上创建一个独立应用程序,该应用程序在执行时不会打开命令提示符窗口。

您可以在 MATLAB 命令提示符下或 Windows 命令行窗口中使用 mcc 命令。

mcc -e myapp.mlapp -o VisualApp

该函数生成一个名为 VisualApp 的独立 Windows 应用程序。

作为替代方案,compiler.build.standaloneWindowsApplication 函数支持大多数常见的工作流。

在 Windows 上创建一个 Excel 加载项,系统级版本号为 5.2.1.7

要生成 Excel 加载项文件 (.xla),您必须启用 Excel 设置中的“信任对 VBA 工程对象模型的访问”。如果您不这样做,则可以通过将生成的 .bas 文件导入 Excel 来手动创建加载项。

mcc -W 'excel:magicExcel,myClass,version=5.2.1.7' -b mymagic.m

该函数生成一个名为 magicExcel 的 Excel 加载项。

作为替代方案,compiler.build.excelAddIn 函数支持大多数常见的工作流。

在 Linux 系统上创建一个 MapReduce 应用程序,该应用程序可由 Hadoop 作为作业运行。

在您的工作文件夹中创建一个名为 config.txt 的配置文件,用于指定配置信息。

mw.ds.in.type = tabulartext
mw.ds.in.format = infoAboutDataset.mat
mw.ds.out.type = keyvalue
mw.mapper = maxArrivalDelayMapper
mw.reducer = maxArrivalDelayReducer
有关详细信息,请参阅使用 mcc 命令创建可部署存档的配置文件

将文件夹 matlabroot/toolbox/matlab/demos 中的示例文件 maxArrivalDelayMapper.mmaxArrivalDelayReducer.mairlinesmall.csv 复制到您的工作文件夹。

使用 mcc 命令编译文件。

mcc -W 'hadoop:maxArrivalDelay,CONFIG:config.txt' maxArrivalDelayMapper.m maxArrivalDelayReducer.m

该函数生成一个名为 run_maxarrivaldelay.sh 的 shell 脚本、一个名为 maxArrivalDelayMapper.ctf 的可部署存档,以及一个包含使用详情的自述文件。

有关详细信息,请参阅将 MATLAB Map 和 Reduce 函数纳入 Hadoop 作业

需要 Simulink Compiler

创建运行 Simulink 仿真的独立应用程序。

使用 Simulink 创建 Simulink 模型。此示例使用模型 sldemo_suspn_3dof

创建一个 MATLAB 应用程序,以使用 Simulink Compiler 的 API 来仿真模型。有关详细信息,请参阅Deploy Simulations with Tunable Parameters (Simulink Compiler)

function deployParameterTuning(outputFile, mbVariable)
 
    if ischar(mbVariable) || isstring(mbVariable)
        mbVariable = str2double(mbVariable);
    end
     
    if isnan(mbVariable) || ~isa(mbVariable, 'double') || ~isscalar(mbVariable)
        disp('mb must be a double scalar or a string or char that can be converted to a double scalar');
    end
     
    in = Simulink.SimulationInput('sldemo_suspn_3dof');   
    in = in.setVariable('Mb', mbVariable);
    in = simulink.compiler.configureForDeployment(in);
    out = sim(in);
     
    save(outputFile, 'out');
  
end

使用 mcc 通过 MATLAB 应用程序创建独立应用程序。

mcc -m deployParameterTuning.m

该函数生成一个名为 deployParameterTuning 的可执行文件。

有关详细信息,请参阅Create and Deploy a Script with Simulink Compiler (Simulink Compiler)

需要 MATLAB Compiler SDK

使用子文件夹 pymagic 中的文件 mymagic.m 创建一个 Python 包。

mcc -W python:magicPython pymagic/mymagic.m

该函数生成一个名为 magicPython 的 Python 包。

作为替代方案,compiler.build.pythonPackage (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

使用文件 mymagic.m 创建 MATLAB Data API .NET 程序集。在 -W 参量中指定命名空间、类名、框架版本、安全性和远程类型。

mcc -W 'dotnet:company.group.magic,api=matlab-data,dotnetClass,0.0,Private,local' mymagic.m

该函数生成一个名为 magic.ctf 的 .NET 程序集存档。

作为替代方案,compiler.build.dotNETAssembly (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

使用文件 mymagic.m 创建 mwArray .NET 程序集。使用 -W 参量指定类名和框架版本。

 mcc -W 'dotnet:magic,magicClass,5.0' mymagic.m

该函数生成一个名为 magic.dll 的 .NET 程序集。

作为替代方案,compiler.build.dotNETAssembly (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

使用文件 mymagic.m 创建 Java 包。使用 -W 参量指定类名和命名空间。

mcc -W 'java:company.group.javamagic,magicClass' mymagic.m

该函数生成一个名为 magic.jar 的 Java 包。

作为替代方案,compiler.build.javaPackage (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

使用文件 mymagic.m 创建一个 C 共享库。

mcc -W lib:magiclibrary mymagic.m

该函数生成一个名为 magic.dll 的 C 共享库。

作为替代方案,compiler.build.cSharedLibrary (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

通过文件 mda_magic.m 创建使用 MATLAB Data API 的 C++ 共享库。

mcc -W 'cpplib:matlabmagiccpp,generic' mda_magic.m

该函数生成一个名为 matlabmagiccpp.ctf 的 C++ 共享库存档。

作为替代方案,compiler.build.cppSharedLibrary (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

通过文件 mwa_magic.m 创建使用 mwArray API 的 C++ 共享库。

mcc -W 'cpplib:mwarraymagiccpp,legacy' mwa_magic.m

该函数生成一个名为 mwarraymagiccpp.dll 的 C++ 共享库。

作为替代方案,compiler.build.cppSharedLibrary (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

使用文件 mymagic.mdata2.mdata2.m 创建 COM 组件。使用 class 参量将 magic 函数映射到名为 MagicClass 类,并将数据函数映射到名为 DataClass 的类。

mcc -W com:magicCOM 'class{MagicClass:mymagic.m}' 'class{DataClass:data1.m,data2.m}'

该函数生成一个名为 magicCOM_1_0.dll 的 COM 组件。

作为替代方案,compiler.build.comComponent (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

需要 MATLAB Compiler SDK

使用 mymagic.m 文件创建一个 MATLAB Production Server 存档。使用 -W 参量指定 JSON 文件,以定义函数签名和 Web 处理程序路由映射。有关函数签名的更多详细信息,请参阅JSON 中的 MATLAB 函数签名 (MATLAB Production Server)。有关 Web 处理程序的更多详细信息,请参阅处理 HTTP 请求中的自定义路由和负载 (MATLAB Production Server)

mcc -U -W 'CTF:mps_magic,DISCOVERY:magicFunctionSignatures.json,ROUTES:magicRoutes.json' mymagic.m

该函数生成一个名为 mps_magic.ctf 的可部署存档。

作为替代方案,compiler.build.productionServerArchive (MATLAB Compiler SDK) 函数支持大多数常见的工作流,但不支持 ROUTES 选项,该选项用于指定特定于存档的到 Web 请求处理程序的路由映射。

需要 MATLAB Compiler SDK

使用 mymagic.m 文件创建一个 MATLAB Production Server 存档。

mcc -U -W CTF:mps_magic mymagic.m

接下来,针对 MATLAB Production Server 创建一个 Excel 加载项。

要生成 Visual Basic 文件,请在 Excel 中启用信任对 VBA 工程对象模型的访问。如果您不这样做,您可以通过将 .bas 文件导入 Excel 来手动创建加载项。

mcc -W 'mpsxl:magicAddin,myExcelClass,version=1.0' mymagic.m

该函数生成一个名为 magicAddin 的 Excel 加载项。

作为替代方案,compiler.build.excelClientForProductionServer (MATLAB Compiler SDK) 函数支持大多数常见的工作流。

输入参数

全部折叠

提示

要按字母顺序查看 mcc 输入参量表,请参阅按字母顺序列出的 mcc 命令参量

要编译的文件,指定为字符向量或字符串标量。

一个或多个要编译的文件,指定为以空格分隔的文件名列表。第一个文件用作编译工件的入口点。

要包含在类 class_name 中的一个或多个文件,指定为以逗号分隔的文件名列表。您可以通过添加额外的 class{___} 参量来包含多个类设定符。该参量仅适用于 COM 组件、Java 包和 .NET 程序集目标。

目标和平台

编译目标和相关选项,指定为下列语法之一。

编译器生成包装函数,允许另一种编程语言运行相应的 MATLAB 函数和任何必要的全局变量定义。

目标语法等效选项
独立应用程序-W 'main:app_name,version=version'-m
独立应用程序(无 Windows 控制台)-W 'WinMain:app_name,version=version'-e
Excel 加载项-W 'excel:addin_name,class_name,version=version'

Hadoop MapReduce 应用程序-W 'hadoop:archive_name,CONFIG:configFile'

Spark 应用程序-W 'spark:app_name,version'

以下目标需要 MATLAB Compiler SDK

目标语法等效选项
C 共享库-W 'lib:library_name'-l
C++ 共享库-W 'cpplib:library_name[,{all|legacy|generic}]'

COM 组件-W 'com:component_name,class_name'

.NET 程序集-W 'dotnet:assembly_name,api={matlab-data|mwarray},
class_name,framework_version,security,{remote|local}'

Java 包-W 'java:package_name,class_name'

Python 包-W 'python:package_name,class_name'

MATLAB Production Server 可部署存档

-W 'CTF:archive_name'

MATLAB Production ServerExcel 加载项

-W 'mpsxl:addin_name,class_name,version'

注意

-W 值如果包含特殊字符(例如逗号或句点),则必须用单引号引起来。从 Windows 命令提示符执行时使用双引号。

输出目标阶段和类型,指定为以下选项之一。如果未指定,mcc 使用 -W 选项指定的目标的默认类型。

目标描述
compile:exe生成 C/C++ 包装文件并将 C/C++ 文件编译为适合链接到独立应用程序的对象形式。
compile:lib生成 C/C++ 包装文件并将 C/C++ 文件编译为适合链接到共享库或 DLL 的对象形式。
link:execompile:exe 相同,也将目标文件链接到独立应用程序中。
link:libcompile:lib 相同,也将目标文件链接到共享库或 DLL 中。

示例: -T link:lib

arch 指定的平台添加到允许的平台列表中。在编译时,MATLAB Compiler 会自动检测平台依赖关系,并限制为仅在兼容的平台上使用。例如,如果您包含一个特定于平台的 MEX 文件,通常您只能在执行编译的平台上使用它。如果您为组件实现了在其他平台上运行的代码,可以使用 -A 使组件在这些平台上运行。

应当采取措施来确保在使用 -A 选项时,组件能在给定平台上成功运行。有关详细信息,请参阅确保编译应用程序的多平台兼容性 (MATLAB Compiler SDK)。如果在不兼容的平台上运行组件,则系统将显示一则不支持的平台错误消息,其中列出兼容的平台。

有效平台是 win64maci64glnxa64maca64all。要添加多个平台,请使用多个 -A 选项。

-A 选项仅适用于使用可部署存档(.ctf 文件)的目标。适用的目标是 Web App、.NET MATLAB Data API、C++ MATLAB Data API、Python、MATLAB Production Server,以及 MapReduce for Spark 或 Hadoop。

指定一个选项捆绑包文件,其中 bundle 是包含一组 mcc 命令行选项、参量、文件名和/或其他 -B 选项的文件的名称。

捆绑包可以包含接受名称和版本号的编译器选项的替换参数。如果传递的参数有多个,您必须将 -B 后面的表达式用单引号引起来。例如,mcc -B 'cexcel:component,class,1.0' ...

一般来说,捆绑包中的每个 %n% 都将被替换为该捆绑包指定的相应选项。使用 %% 可包含字面字符 %。向捆绑包传递过多或过少的选项是错误的。

以下捆绑包文件位于 matlabroot\toolbox\compiler\bundles 中。

可用的捆绑包文件

捆绑包文件

目标内容
ccom

COM 组件

-W com:%1%,%2%,%3% -T link:lib
cexcel

Excel 加载项

-W excel:%1%,%2%,%3% -T link:lib -b -S
cjava

Java 包

-W java:%1%,%2%
cmpsxl用于 MATLAB Production Server 的 Excel 加载项-W mpsxl:%1%,%2%,%3% -T link:lib
cpplib

C++ 库

-W cpplib:%1% -T link:lib
csharedlib

C 库

-W lib:%1% -T link:lib
dotnet

.NET 程序集

-W dotnet:%1%,%2%,%3%,%4%,%5% -T link:lib

独立应用程序

生成独立应用程序。-m 相当于 -W main -T link:exe。在 Windows 上,执行应用程序时会打开命令提示符。

生成一个独立的 Windows 应用程序,该应用程序在执行时不会打开 Windows 命令提示符。-e 相当于 -W WinMain -T link:exe

此选项仅适用于 Windows 操作系统。

指定独立应用程序的最终可执行文件的名称。将适用的平台相关扩展名添加到指定的名称,例如 .exe(对于 Windows 独立应用程序)。

示例: -o myexecutable

将图标资源添加到独立应用程序的可执行文件中。路径可以是相对于当前工作目录的路径,也可以是绝对路径。

示例: -r path\to\icon.ico

将命令行输入解释为 MATLAB 双精度值。如果您不指定此选项,命令行输入将被视为 MATLAB 字符向量。

Excel 加载项和 COM 组件

生成一个 Visual Basic 文件 (.bas) 和一个 Excel 加载项文件 (.xla)。.bas 文件包含 MATLAB Compiler 生成的 COM 对象的 Microsoft Excel Formula Function 接口。当导入到工作簿时,此 Visual Basic 代码允许将 MATLAB 函数用作单元格公式函数。

注意

要生成 Excel 加载项文件 (.xla),您必须启用 Excel 设置中的“信任对 VBA 工程对象模型的访问”。

仅在开发计算机上为当前用户注册 COM 组件。该参量仅适用于通用 COM 组件和 Microsoft Excel 加载项目标。

C 共享库

生成 C 共享库。-l 相当于 -W lib -T link:lib

抑制编译和链接生成的 C 包装器代码。-c 选项不能独立于 -l 选项使用。

MATLAB Production Server

生成一个 MATLAB Production Server 存档(.ctf 文件)。此参量必须位于 mfilename 之前,并且您还必须指定选项 -W 'CTF:archive_name'

其他文件

将文件或文件夹添加到可部署存档中。文件路径可以是相对路径,也可以是绝对路径。有关更多详细信息,请参阅在打包的应用程序中包含和访问文件

要添加多个文件,请使用多个 -a 选项、指定一个文件夹或使用通配符。

如果文件夹名称是使用 -a 选项指定的,则该文件夹的全部内容将递归添加到可部署存档中。例如:

mcc -m hello.m -a ./testdir 

指定将 testdir 中的所有文件及其子文件夹中的所有文件添加到可部署存档中。testdir 中的文件夹子树保留在可部署存档中。

如果文件名包含通配符模式 (*),则仅将文件夹中与该模式匹配的文件添加到可部署存档中,并且不会递归处理给定路径的子文件夹。例如,以下命令将 ./testdir 中的所有文件添加到可部署存档中,并且不会递归处理 ./testdir 下的子文件夹。

mcc -m hello.m -a ./testdir/*

以下命令添加 ./testdir 下扩展名为 .m 的所有文件,并且不会递归处理 ./testdir 下的子文件夹。

mcc -m hello.m -a ./testdir/*.m

包括 Java

如果您使用 -a 标志来包含自定义 Java 类,则只要 Java 类不是某个包的成员,独立应用程序在无需更改 classpath 的情况下就可以运行。这对于 JAR 文件同样适用。但是,如果所添加的类是某个包的成员,则 MATLAB 代码需要对 javaaddpath 进行适当的调用,以使用该包的父文件夹更新 classpath

添加自定义帮助文本文件。路径可以是相对于当前工作目录的路径,也可以是绝对路径。此选项适用于独立应用程序、C/C++ 共享库、COM 和 Excel 目标。

通过在命令行上使用 -?/? 参量调用应用程序来显示帮助文件内容。

示例: -h path\to\helpfile

在依赖关系分析期间排除由常见的 MATLAB 文件 I/O 函数读取的数据文件。有关如何使用 -X 选项的示例,请参阅 %#exclude。有关详细信息,请参阅使用 MATLAB Compiler 进行依赖关系分析

将向可部署存档中添加支持包的方法指定为以下选项之一。

语法描述
-Z autodetect依赖关系分析过程会自动检测并包含所需的支持包。这是 mcc 的默认行为。
-Z none不包含任何支持包。使用此选项可能会导致运行时错误。
-Z 'packagename'仅包含指定的支持包。要指定多个支持包,请使用多个 -Z 输入。

示例: -Z 'Deep Learning Toolbox Converter for TensorFlow Models'

mcc 编译选项

将编译输出放在指定的文件夹 outputfolder 中。路径可以是相对于当前目录的路径,也可以是绝对路径。

不要将可部署存档嵌入二进制文件中。对于 Java 库,此选项会被忽略。

使用指定的文件 licensefile 覆盖默认的许可证文件。此选项只能在系统命令行上使用。

在控制台中显示 mcc 帮助文本。

保护源代码

自 R2022b 起

混淆处理 .m 文件。此选项在打包之前为 mcc 命令中包含的每个 .m 文件生成一个扩展名为 .p 的 P 代码文件。

P 代码文件是 MATLAB 代码的模糊处理仅执行形式。有关详细信息,请参阅 pcode

自 R2024a 起

指定一个机密清单 JSON 文件,以将指定的密钥嵌入可部署存档中。

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

setSecret 函数不可部署。要部署密钥,您必须在调用 mcc 之前在 MATLAB 中调用 setSecret

有关使用密钥进行部署的详细信息,请参阅处理已部署 App 中的敏感信息。有关使用密钥部署独立应用程序的示例,请参阅访问独立应用程序中的敏感信息

示例: -J myapp_secrets_manifest.json

自 R2022b 起

指定 AES 加密密钥和 MEX 文件加载程序接口,以在运行时检索解密密钥。

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

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

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

加载程序 MEX 文件必须是具有以下参量的接口:

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

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

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

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

如果在 -k 之后未指定任何参量,mcc 会生成一个 256 位 AES 密钥,以及一个可用于演示目的的加载程序 MEX 文件。

对于 C++ 共享库,除了在编译时指定密钥和 MEX 加载程序之外,您还可以仅指定加密密钥 (自 R2023b 起)。然后,在运行时,您在 C++ 应用程序中提供十六进制编码的 64 字节解密密钥,作为使用 MATLAB Data API 的 initMATLABLibrary (MATLAB Compiler SDK) 函数或使用 MWArray API 的 <library>InitializeWithKey (MATLAB Compiler SDK) 函数的参量。对于此工作流,语法是 -k '<keyfile>'

示例: -k 'file=path\to\encryption.key;loader=path\to\loader_interface.mexw64'

自 R2021b 起

混淆处理来自最终用户的可部署存档(.ctf 文件)中的文件夹结构和文件名。可选择加密其他文件类型。

-s 选项指示 mcc.m.mlapp.p .mat、MLX 文件、SFX 文件和 MEX 文件中包含的用户代码和数据放入 CTF 内的用户包中。在运行时,系统会从用户包直接解密和加载 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 文件

MATLAB Runtime

提供在初始化时传递给应用程序的 MATLAB Runtime 选项。此选项仅在构建独立应用程序或 Excel 加载项时使用。

您可以指定多个 -R 选项。当您指定多个 -R 选项时,系统将按从左到右的顺序对其进行处理。例如,指定初始化开始和结束消息。

mcc -R '-startmsg,MATLAB Runtime initialized' -R '-completemsg,Initialization complete'

选项

描述

目标

'-logfile,filename'

指定日志文件名。此文件是在运行时在应用程序文件夹中创建的,并且包含有关 MATLAB Runtime 初始化的信息和输出到命令行窗口的所有文本。选项必须用单引号引起来。从 Windows 命令提示符执行命令时使用双引号。

如果文件路径已指定,则该路径必须存在,并且不能包含环境变量。

MATLAB Compiler

-nodisplay

隐藏 MATLAB nodisplay 运行时警告。在 Linux 上,打开不带显示功能的 MATLAB Runtime

MATLAB Compiler

-nojvm

不要使用 Java 虚拟机 (JVM)。

MATLAB Compiler

'-startmsg,message'

初始化时显示的可自定义用户消息。有关详细信息,请参阅显示 MATLAB Runtime 初始化消息

MATLAB Compiler 独立应用程序

'-completemsg,message'

初始化完成时显示的可自定义用户消息。有关详细信息,请参阅显示 MATLAB Runtime 初始化消息

MATLAB Compiler 独立应用程序

-singleCompThread

将 MATLAB 限制为单个计算线程。

MATLAB Compiler

-softwareopengl使用 Mesa Software OpenGL® 进行渲染。

MATLAB Compiler

小心

macOS 上运行时,如果您将 -nodisplay 作为 mclInitializeApplication 中包含的选项之一,则必须在调用 mclRunMain 之前调用 mclInitializeApplication

创建一个在所有类实例之间共享的单个 MATLAB Runtime 实例。

MATLAB Runtime 的标准行为是类的每个实例都会获得自己的 MATLAB Runtime 上下文。该上下文包括变量(例如路径)的全局 MATLAB 工作区,以及类中每个函数的基础工作区。如果创建了一个类的多个实例,则每个实例都会获得一个独立的上下文。这可确保对类的一个实例中的全局或基础工作区所做的更改不会影响该类的其他实例。

在单一 MATLAB Runtime 中,类的所有实例都共享上下文。如果创建了一个类的多个实例,这些实例将使用由第一个实例创建的上下文,从而节省启动时间和部分资源。但是,一个实例对全局工作区或基础工作区所做的任何更改会影响所有类实例。例如,如果 instance1 在单一 MATLAB Runtime 中创建全局变量 A,则 instance2 可以使用变量 A

以下特定目标仅支持单一 MATLAB Runtime

单一 MATLAB Runtime 支持的目标使用说明
Excel 加载项单一 MATLAB Runtime 是默认行为。您不需要执行其他步骤。
.NET 程序集单一 MATLAB Runtime 是默认行为。您不需要执行其他步骤。
COM 组件

使用 mcc 传递 -S 标志。

Java 包

MATLAB Compiler 搜索路径

在依赖关系分析期间将新文件夹添加到 MATLAB Compiler 使用的搜索路径。每个 -I 选项都将文件夹追加到路径列表的末尾。例如,以下语法设置搜索路径,以便先在 directory1 中搜索 MATLAB 文件,然后在 directory2 中进行搜索。

-I <directory1> -I <directory2>

对于 MATLAB 路径不可用的编译环境,此选项很重要。

如果与 -N 选项结合使用,-I 选项会将文件夹添加到编译路径中与 MATLAB 路径中相同的位置,而不是路径的开头。

清除除以下核心文件夹之外的所有文件夹的搜索路径(此列表可能会随时变化):

  • matlabroot\toolbox\matlab

  • matlabroot\toolbox\local

  • matlabroot\toolbox\compiler

  • 在 R2024b 之前的版本中: matlabroot\toolbox\shared\bigdata

-N 还在此列表中保留编译时出现在 MATLAB 路径中的所有子文件夹。此选项可让您替换原始路径中的文件夹,同时保留所包括的文件夹的相对顺序。出现在原始路径中的所包括文件夹的所有子文件夹也将被包括在内。此外,-N 选项会保留路径中的不在 matlabroot\toolbox 下的所有文件夹。

使用 –N 选项时,请使用 –I 选项强制包括位于编译路径最前面的文件夹。使用 –p 选项可有条件地包括文件夹及其子文件夹;如果它们存在于 MATLAB 路径中,则将以相同的顺序出现在编译路径中。

有条件地将 matlabroot\toolbox 下的特定文件夹和子文件夹添加到 MATLAB 的编译路径中。文件的添加顺序与它们在 MATLAB 路径中出现的顺序相同。您必须将此选项与选项 -N 结合使用。

使用语法 -N -p directory,其中 directory 是要包括的文件夹的相对或绝对路径。

您可以通过指定多个 -p 条目添加多个文件夹。例如,添加文件夹 foobar

-N -p foo -p bar

  • 如果使用 -p 包括 MATLAB 原始路径中的文件夹,则原始路径中出现的该文件夹及其所有子文件夹将按相同顺序添加到编译路径中。

  • 如果使用 -p 包括不在 MATLAB 原始路径中的文件夹,则该文件夹将被忽略。(您可以使用 -I 强制将其包括在内。)

mbuild 选项

调用 mbuild 时将 filename 指定为选项文件。该选项直接传递到 mbuild,以允许您对编译器的不同调用使用不同的 ANSI 编译器。如果在 Windows 上指定文件的绝对路径,则它必须以两个正斜杠 (/) 开头,并始终使用正斜杠。

此选项特别适用于 C/C++ 共享库、COM 和 Excel 目标。

定义 mbuild 编译时选项。options 参量直接传递到 mbuild。此选项提供了一种定义编译时选项的机制,例如 -M "-Dmacro=value"

注意

多个 -M 选项不会累积;仅使用最右边的 -M 选项。

要传递 /bigobj 等选项,请根据您的平台界定字符串。

平台语法

MATLAB

-M 'COMPFLAGS=$COMPFLAGS /bigobj'
Windows 命令提示符
-M COMPFLAGS="$COMPFLAGS /bigobj"

Linux 和 macOS 命令提示符

-M CFLAGS='$CFLAGS /bigobj'

复数表示

自 R2018a 起,MATLAB 使用交错存储表示,其中每个数字的实部和虚部存储在一起。但是,当您使用 mcc 命令生成基于 mxArray 的 C 共享库或基于mwArray 的 C++ 共享库时,这些库默认为对复数采用单独的存储表示,这种表示可能会降低性能。

要在这些共享库中使用交错表示,请使用 -M R2018a 选项。

为了使用最佳方法生成 C++ 共享库,请选择用于 C++ 的 MATLAB Data Array,它本质上使用交错存储表示。

当使用 mbuild (MATLAB Compiler SDK) 命令集成 mcc 生成的共享库时,标志应该匹配。如果将 -M -R2018a 传递到 mcc 命令,则应将 -R2018a 传递到 mbuild

调试

包括 MATLAB Compiler SDK 生成的代码的调试符号信息。此选项还会使 mbuild 将相应的调试标志传递到系统编译器。通过调试选项,您可以回溯到能够确定故障是发生在 MATLAB Runtime 初始化、函数调用还是终止例程中的时间点。此选项不允许您使用外部调试器调试 MATLAB 文件。

此选项适用于 C、C++、Java、Excel 和 .NET 目标。

如果编译由于错误而提前结束,请保留部分输出文件。

如果命令无法成功执行,mcc 的默认行为是处理任何部分输出。

显示详尽输出。输出显示编译步骤,包括:

  • MATLAB Compiler 版本号

  • 处理时的源文件名

  • 创建时的生成输出文件的名称

  • 调用 mbuild

-v 选项还将 -v 选项传递到 mbuild 并显示有关 mbuild 的信息。

控制警告消息的显示。

语法

描述

-w list

列出具有缩写标识符的编译时警告及其状态。

-w enable[:<warning>]

启用与 <warning> 相关的特定编译时警告。省略可选 <warning> 可将 enable 操作应用于所有编译时警告。

-w disable[:<warning>]

禁用与 <warning> 相关的特定编译时警告。省略可选 <warning> 可将 disable 操作应用于所有编译时警告。

-w error[:<warning>]

将与 <warning> 相关的特定编译时和运行时警告处理为错误。省略可选 <warning> 可将 error 操作应用于所有编译时和运行时警告。

-w on[:<warning>]

打开与 <warning> 相关的运行时警告。省略可选 <warning> 可将 on 操作应用于所有运行时警告。默认情况下启用此选项。

-w off[:<warning>]

关闭由 <warning> 定义的特定错误消息的运行时警告。省略可选 <warning> 可将 off 操作应用于所有运行时警告。

<warning> 参量可以是完整标识符,例如Compiler:compiler:COM_WARN_OPTION_NOJVM,也可以是 -w list 列出的缩写标识符之一。

在警告发生后,您可以通过在 MATLAB 代码中发出以下语句来显示与警告对应的完整标识符。

[msg, warnID] = lastwarn

如果指定多个 -w 选项,则按从左到右的顺序对其进行处理。

例如,禁用除 repeated_file 之外的所有警告。

-w disable -w enable:repeated_file

您还可以全局打开或关闭警告。例如,要关闭所有已部署应用程序的警告,请使用 isdeployedstartup.m 中指定以下内容。

if isdeployed
    warning off
end

限制

  • mcc 无法创建 Web 应用。要创建 Web App,请使用 Web App 编译器compiler.build.webAppArchive 函数。

  • 您可以使用 mccMATLAB Online Server™ 上构建组件,该服务器充当 Linux 环境 (自 R2022b 起)。要构建需要外部编译器的目标,包括 Java、C++ 和 COM 组件,必须设置 MATLAB Online Server 工作单元以运行所需的工具链。

提示

  • 在 Windows 上,您可以通过将 version=version_number 追加到目标生成 mcc 语法来为目标文件生成系统级文件版本号。例如,请参阅创建 Excel 加载项(仅限 Windows)

    version_number - 将目标文件的版本指定为文件系统中的 major.minor.bug.build。您不需要指定版本号。如果您未指定版本号,mcc 会默认将版本号设置为 1.0.0.0

    • major - 指定主版本号。如果您未指定版本号,mcc 会将 major 设置为 1

    • minor - 指定次要版本号。如果您未指定版本号,mcc 会将 minor 设置为 0

    • bug - 指定 bug 修复维护版本号。如果您未指定版本号,mcc 会将 bug 设置为 0

    • build - 指定内部版本号。如果您未指定版本号,mcc 会将 build 设置为 0

    MATLAB Compiler 中的独立应用程序和 Excel 加载项支持此功能。

    MATLAB Compiler SDK 中用于 MATLAB Production Server 的 C 共享库、C++ 共享库、COM 组件、.NET 程序集和 Excel 加载项支持此功能。

版本历史记录

在 R2006a 之前推出