菜鸟科技网

MCC命令是什么?如何快速掌握?

mccMATLAB Compiler 的命令行界面,它允许你将 MATLAB 代码(.m 文件、函数等)编译成独立的可执行文件(.exe)、共享库(.dll, .so, .dylib)、Web 应用程序(.war)或 Python 包。

MCC命令是什么?如何快速掌握?-图1
(图片来源网络,侵删)

与 MATLAB 桌面环境中的 Application Compiler App 相比,mcc 命令行方式提供了更大的灵活性,可以轻松地集成到自动化构建脚本(如 CI/CD 流程)中。


基本语法

mcc 命令的基本语法结构如下:

mcc [选项] <输出类型> <输入文件>
  • [选项]: 用于控制编译过程的标志和参数,例如指定依赖项、优化级别等。
  • <输出类型>: 指定你想要生成的目标类型,这是编译的核心指令。
  • <输入文件>: 你的主入口文件(通常是包含 main 函数的 .m 文件)或要编译的文件列表。

核心:输出类型

mcc 命令最关键的部分是 -T 选项,它用来指定编译目标。-T 的格式通常是 -T:link:<target>

以下是几种最常见的输出类型:

MCC命令是什么?如何快速掌握?-图2
(图片来源网络,侵删)
目标类型 描述 生成的文件 适用场景
compile:exe 可执行文件 .exe (Windows), 无扩展名 (Linux/macOS) 创建一个可以从命令行直接运行的独立程序。
compile:lib C/C++ 共享库 .dll (Windows), .so (Linux), .dylib (macOS) 将 MATLAB 函数封装成库,供 C/C++、Python、Java 等其他语言调用。
compile:pkg Python 包 .pyd (Windows), .so (Linux/macOS) 和其他辅助文件 将 MATLAB 函数封装成 Python 模块,方便在 Python 中使用 import 调用。
web:war Web 应用程序 (WAR) .war 文件 将 MATLAB 应用部署到支持 Java Servlet 的 Web 服务器(如 Tomcat)上。

示例:

# 编译 myApp.m 生成一个名为 myApp.exe 的可执行文件
mcc -T:link:exe myApp
# 编译 myLib.m 生成一个 C 共享库
mcc -T:link:lib myLib

常用选项

除了 -T 选项,mcc 还有许多其他有用的选项:

选项 描述 示例
-m 快速生成可执行文件,这是 -T:link:exe 的简写形式。 mcc -m myApp
-W 指定主函数的包装器类型,对于可执行文件,通常是 main mcc -m -W main myApp (与 -m 效果相同)
-R 将 MATLAB 启动选项传递给编译后的应用程序。 mcc -m -R "-nojvm" myApp (生成的程序不启动 JVM)
-I 添加额外的 MATLAB 路径,编译器会在此路径中查找函数。 mcc -m -I "C:\MyToolbox" myApp
-a (非常重要) 指定必须包含在打包文件中的数据文件(如 .mat, .jpg, .txt)或文件夹。 mcc -m -a data.mat -a images myApp
-N 在生成的可执行文件中不包含 MATLAB 运行时库的路径信息(即不生成 readme.txtinstall.bat),这会使部署更简洁,但需要手动配置 MCR。 mcc -m -N myApp
-v (调试利器) 显示详细的编译过程信息,有助于排查问题。 mcc -v -m myApp
-o 指定输出可执行文件或库的名称。 mcc -m -o MyAwesomeApp myApp

完整编译流程示例

假设你有一个项目,包含以下文件:

  • mainApp.m (主程序)
  • calculate.m (一个被 mainApp 调用的函数)
  • data/config.mat (一个数据文件)
  • images/logo.png (一个图片资源)

步骤 1:准备代码

确保 mainApp.mcalculate.m 都在同一个目录下,calculate.m 的路径是正确的(通过 addpath 或将 calculate.m 放在 mainApp.m 同级目录)。

MCC命令是什么?如何快速掌握?-图3
(图片来源网络,侵删)

mainApp.m 示例:

function mainApp()
    disp('Hello from my compiled app!');
    % 调用另一个函数
    result = calculate(10, 5);
    fprintf('The result is: %d\n', result);
    % 加载数据文件
    data = load('data/config.mat');
    disp('Loaded configuration:');
    disp(data.config);
    % 显示图片 (需要 MATLAB Image Processing Toolbox)
    % imshow('images/logo.png');
end

calculate.m 示例:

function y = calculate(a, b)
    y = a + b;
end

步骤 2:使用 mcc 命令编译

打开命令行(CMD 或 PowerShell),切换到你的项目目录,然后运行以下命令:

mcc -m -v -a data -a images -o MyCompiledApp mainApp.m

命令解析:

  • mcc: 调用编译器。
  • -m: 编译成可执行文件。
  • -v: 显示详细日志。
  • -a data: 将 data 文件夹及其所有内容打包到最终产物中。
  • -a images: 将 images 文件夹及其所有内容打包。
  • -o MyCompiledApp: 指定输出的可执行文件名为 MyCompiledApp.exe
  • mainApp.m: 主入口文件。

步骤 3:查看输出

编译成功后,你的项目目录下会生成一堆文件:

  • MyCompiledApp.exe: 这是你最终可以运行的程序
  • MyCompiledApp.ctf: 一个包含所有 MATLAB 代码和资源的加密存档文件。
  • readme.txt: 部署说明文档。
  • mcrinstaller.exe: MATLAB Compiler Runtime (MCR) 的安装程序,用户需要先安装它才能运行你的 .exe 文件。
  • 以及其他一些日志和辅助文件。

步骤 4:部署和运行

  1. 打包: 创建一个新的文件夹,将 MyCompiledApp.exeMyCompiledApp.ctf 复制进去。
  2. 安装 MCR: 在目标计算机上运行 mcrinstaller.exe,按照提示安装 MCR。
  3. 运行: 在安装了 MCR 的计算机上,双击 MyCompiledApp.exe 即可运行你的程序。

常见问题与注意事项

  1. 找不到函数: 如果编译时提示找不到某个函数,通常是因为该函数不在 MATLAB 的搜索路径中,使用 -I 选项添加路径,或将所有相关文件放在主文件同级目录下。
  2. MCR 依赖: 编译后的程序必须在安装了对应版本 MCR 的计算机上运行,MCR 是一个庞大的环境,打包和分发时需要考虑其大小。
  3. 图形界面: 如果你的 MATLAB 代码使用了 figure, uicontrol 等创建 GUI,编译成 .exe 后依然可以运行,但如果使用了 appdesigner,情况会更复杂,通常建议使用 MATLAB Compiler SDK 进行更专业的部署。
  4. 性能: 编译后的程序启动速度通常比直接运行 MATLAB 脚本慢,因为它需要加载 MCR,但一旦运行,其计算性能与 MATLAB 本身基本一致。
  5. License: 确保你的 MATLAB 许可证支持编译功能。

希望这个详细的解释能帮助你理解和使用 mcc 命令!

分享:
扫描分享到社交APP
上一篇
下一篇