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

与 MATLAB 桌面环境中的 Application Compiler App 相比,mcc 命令行方式提供了更大的灵活性,可以轻松地集成到自动化构建脚本(如 CI/CD 流程)中。
基本语法
mcc 命令的基本语法结构如下:
mcc [选项] <输出类型> <输入文件>
[选项]: 用于控制编译过程的标志和参数,例如指定依赖项、优化级别等。<输出类型>: 指定你想要生成的目标类型,这是编译的核心指令。<输入文件>: 你的主入口文件(通常是包含main函数的 .m 文件)或要编译的文件列表。
核心:输出类型
mcc 命令最关键的部分是 -T 选项,它用来指定编译目标。-T 的格式通常是 -T:link:<target>。
以下是几种最常见的输出类型:

| 目标类型 | 描述 | 生成的文件 | 适用场景 |
|---|---|---|---|
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.txt 和 install.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.m 和 calculate.m 都在同一个目录下,calculate.m 的路径是正确的(通过 addpath 或将 calculate.m 放在 mainApp.m 同级目录)。

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:部署和运行
- 打包: 创建一个新的文件夹,将
MyCompiledApp.exe和MyCompiledApp.ctf复制进去。 - 安装 MCR: 在目标计算机上运行
mcrinstaller.exe,按照提示安装 MCR。 - 运行: 在安装了 MCR 的计算机上,双击
MyCompiledApp.exe即可运行你的程序。
常见问题与注意事项
- 找不到函数: 如果编译时提示找不到某个函数,通常是因为该函数不在 MATLAB 的搜索路径中,使用
-I选项添加路径,或将所有相关文件放在主文件同级目录下。 - MCR 依赖: 编译后的程序必须在安装了对应版本 MCR 的计算机上运行,MCR 是一个庞大的环境,打包和分发时需要考虑其大小。
- 图形界面: 如果你的 MATLAB 代码使用了
figure,uicontrol等创建 GUI,编译成.exe后依然可以运行,但如果使用了appdesigner,情况会更复杂,通常建议使用 MATLAB Compiler SDK 进行更专业的部署。 - 性能: 编译后的程序启动速度通常比直接运行 MATLAB 脚本慢,因为它需要加载 MCR,但一旦运行,其计算性能与 MATLAB 本身基本一致。
- License: 确保你的 MATLAB 许可证支持编译功能。
希望这个详细的解释能帮助你理解和使用 mcc 命令!
