下面我会设计一个极简但完整的MATLAB函数示例,并手把手教你如何将它打包成独立EXE,然后在命令行中调用和测试。
1️⃣ 设计一个简单的 .m 函数(用于打包)
我们创建一个函数,它从命令行参数读取输入文件,计算一个数的平方和平方根,并写入输出文件。
文件名 :calc_main.m
matlab
function calc_main(inputFile, outputFile)
% 如果未提供参数,使用默认演示文件(便于直接双击EXE测试)
if nargin < 2
inputFile = 'input.txt';
outputFile = 'output.txt';
end
% 读取输入(假设文件中只有一个浮点数)
fid = fopen(inputFile, 'r');
if fid == -1
error('无法打开输入文件: %s', inputFile);
end
num = fscanf(fid, '%f');
fclose(fid);
% 进行计算(演示两种运算)
square = num^2;
sqrtVal = sqrt(abs(num)); % 为防负数,取绝对值开方
% 写入输出文件
fid = fopen(outputFile, 'w');
fprintf(fid, '平方: %.4f\n', square);
fprintf(fid, '平方根: %.4f\n', sqrtVal);
fclose(fid);
end
2️⃣ 在本机MATLAB中测试该函数
在MATLAB命令窗口执行:
matlab
% 先准备一个 input.txt(内容例如 9.0)
% 然后运行:
calc_main('input.txt', 'output.txt')
检查 output.txt 内容是否正确。
3️⃣ 打包为独立 EXE(使用 MATLAB Compiler)
✅ 前置检查
- 你的MATLAB已安装 MATLAB Compiler 工具箱。
在命令窗口输入ver compiler,如果有版本信息则已安装。 - 如果没有,可以通过MATLAB的"附加功能管理器"安装。
🛠️ 打包命令
在MATLAB命令窗口中执行:
matlab
mcc -m calc_main.m -o MyCalc
-m表示生成独立应用程序(Standalone Application)-o MyCalc指定输出EXE名为MyCalc.exe(不指定则默认calc_main.exe)
执行完毕后,会在当前目录生成 MyCalc.exe 文件(以及一些辅助文件,如 .ctf 等,但EXE是独立的)。
4️⃣ 在 Windows 命令行中测试 EXE
注意 :打包后的EXE必须在安装了对应版本MCR 的机器上运行。但你本机已安装完整MATLAB,所以可以直接测试(它会自动使用本机的MATLAB运行时)。
打开 CMD,进入EXE所在目录,创建 input.txt(内容为一个数字,如 25),然后执行:
cmd
MyCalc.exe input.txt output.txt
查看 output.txt,应该得到正确结果。
如果不想依赖文件,也可以改成从标准输入读取(示例略),但文件方式最通用。
5️⃣ 如何在其他语言(Lua / Qt C++)中调用该 EXE
📌 Lua 调用示例
lua
-- 使用 os.execute 简单调用
os.execute("MyCalc.exe input.txt output.txt")
-- 或者用 io.popen 读取标准输出(如果你的程序支持)
local handle = io.popen("MyCalc.exe input.txt output.txt")
local result = handle:read("*a")
handle:close()
print(result)
📌 Qt C++ 调用示例(使用 QProcess)
cpp
#include <QProcess>
#include <QDebug>
void callMyCalc() {
QProcess process;
QString program = "MyCalc.exe";
QStringList args = {"input.txt", "output.txt"};
process.start(program, args);
if (!process.waitForFinished()) {
qDebug() << "执行失败:" << process.errorString();
return;
}
qDebug() << "执行成功";
// 可读取 process.readAllStandardOutput() 获取标准输出
}
6️⃣ 分发到未安装MATLAB的电脑时,需要准备什么?
- 将
MyCalc.exe和MyCalc.ctf(如果有)一起复制到目标电脑。 - 安装与你的MATLAB版本完全一致的 MCR (MATLAB Runtime)。
下载地址:https://www.mathworks.com/products/compiler/matlab-runtime.html - 安装后,目标电脑即可直接运行
MyCalc.exe,无需安装MATLAB。
最关键的一点:确定MATLAB的精确版本。 用来打包的MATLAB版本,必须和新电脑上安装的MCR版本完全一致。
- 在MATLAB命令窗口输入
version,会得到类似R2024a或9.14.0.2206163的结果。 - 记住这个版本号,这是下载MCR的唯一依据。
在目标新电脑上,下载并安装对应版本的MCR。
-
官方下载 :访问 MathWorks 官网的 MATLAB Runtime 下载页面。
-
精确查找 :在页面中找到与你的MATLAB版本完全一致的MCR版本进行下载。例如,MATLAB R2024a 对应 MCR R2024a。
-
获取下载链接(可选) :如果网络不稳定,可以在你的MATLAB中运行以下命令直接获取下载链接,再用其他工具下载:
matlaburl = com.mathworks.toolbox.compiler.MatlabRuntimeUtils.getMCRInstallerDownloadURL(); disp(url)
下载完成后,在新电脑上以管理员身份运行安装程序,按默认选项完成安装即可。
整个部署过程可以概括为三步:记下版本 → 下载安装匹配的MCR → 运行EXE 。只要保证MATLAB与MCR的版本严格一致 ,你的 MyCalc.exe 就能在任意一台Windows电脑上独立运行。
7️⃣ 常见问题与注意事项
| 问题 | 解决办法 |
|---|---|
| 运行时提示"未找到 MCR" | 安装对应版本的 MCR,并确保系统环境变量 PATH 中包含 MCR 的 bin 目录 |
| 路径错误,找不到文件 | 在 .m 代码中使用 fileparts(mfilename('fullpath')) 获取EXE所在目录,并基于此拼接文件路径,避免硬编码 |
| 汉字显示乱码 | 在 fopen 时指定编码,如 fopen(..., 'r', 'n','UTF-8') |
| 希望传递数值而非文件 | 修改函数,使用 varargin 接收命令行参数(如 MyCalc.exe 9.0),用 str2double 转换,然后用 disp 输出到标准输出 |

从上传的截图看,在命令行中调用 calc_main 时,MATLAB 报错"函数或变量 'calc_main' 无法识别"。这通常是因为 MATLAB 找不到这个函数文件。
🔍 可能的原因
- 当前工作目录不包含
calc_main.m文件。 - 文件尚未保存(尽管编辑器中有代码,但未保存到磁盘)。
- 函数文件名与函数名不一致 (但你的文件名和函数名都是
calc_main,所以没问题)。
✅ 解决方案
-
保存文件 :在编辑器中按
Ctrl+S保存calc_main.m。 -
切换工作目录 :在命令行中输入:
matlabcd('E:\wkNew\hhh\Beam\testMatlab') % 替换为你文件所在的实际路径或者用
addpath将该目录添加到搜索路径:matlabaddpath('E:\wkNew\hhh\Beam\testMatlab') -
检查是否可识别 :输入
which calc_main,如果显示文件路径,则已成功识别。
⏳ 然后重新运行
matlab
calc_main('input.txt', 'output.txt')
应该就能正常执行了。
📦 打包成 EXE 的后续步骤
在函数可正常运行后,在命令行执行:
matlab
mcc -m calc_main.m -o MyCalc
即可生成 MyCalc.exe。记得确保你的 MATLAB 已安装 MATLAB Compiler 工具箱(可用 ver compiler 检查)。