我创建了一个运行良好的部署项目,现在我想将其添加到源代码控制存储库以供其他人使用。
我面临的主要问题是
.prj
创建的 deploytool
文件包含绝对路径,该路径在其他计算机上不起作用。到目前为止,我已经尝试过以下方法:
mcc
而不使用 deploytool
创建独立的 exe。这很好用,但我可以找到一种方法来创建包含所有内容的最终 _pkg.exe
。 mcc 似乎无法创建此文件,并且似乎没有任何其他工具可以创建此文件。真的是这样吗?.prj
文件以包含相对路径而不是绝对路径。这只能部分起作用,因为 .prj
文件包含一个名为 MATLABPath
的部分,该部分始终会替换为 matlab 的当前 setpath
。任何使用此文件的人都必须检查它,因为它在使用时被更改。.prj
文件的方法。 mcc 文档说: Project files created using either mcc or deploytool are eligible to use this option.
建议有一种方法可以使用 .prj
创建 mcc
文件,但我无法找到如何做到这一点。这种情况有解决办法吗?
我们在使用 Matlab Builder JA 时遇到了同样的事情。不仅路径是绝对路径,Matlab 还添加了它在路径上找到的其他工具箱,这很烦人,因为构建机器没有很多工具箱的许可证。
所以我们要做的是:
我们的修订控制允许您修改文件而无需显式签出,因此使用deploytool不是问题。但你为什么要这么做?
不确定最终的打包程序会做什么,但如果它只是将 MCR 与编译后的二进制文件捆绑在一起,我只会编写一个替代品。
我个人使用 Visual Studio 2005 项目来维护我的部署项目,然后使用构建命令步骤将 VCPROJ 即时转换为 PRJ http://younsi.blogspot.com/2011/11/matlab-relative-path-issue-in-prj.html
参加聚会有点晚了,但也许仍然有用。我们添加了一个初始化脚本,可以为每个人在本地创建项目:
path = pwd;
projectName = 'OurProject';
proj = matlab.project.createProject("Folder", path, "Name", projectName);
disp(proj.name);
addFile(proj, 'startup.m');
addStartupFile(proj, 'startup.m');
addFile(proj, 'shutdown.m');
addShutdownFile(proj, 'shutdown.m');
startup;
还将
*.prj
和 resources/
添加到您的 .gitignore。
然后每个新用户只需在克隆存储库后执行此脚本一次,然后在打开 matlab 后双击 OurProject.prj 即可。
这是 mcc 选项文档。
我发现最有用的是使用 mcc 创建一个独立的 exe:
mcc -C -m <function.m> -a <fig> -a <dll> -a <etc> -d <outputPath>
-C 选项告诉
mcc
将 ctf 文件(这是所有已编译的 MATLAB 内容的存档)生成为单独的文件。 我在某些目标计算机上使用单个 exe 并编译了所有内容时遇到了麻烦。
-m 选项告诉
mcc
制作一个 exe。
-a 选项告诉
mcc
将指定的文件包含在包中。 例如,如果您的脚本使用两个 Fig 文件和一个数据文件,则每个文件都需要一个 -a 以确保它们放入输出包中。
告诉 mcc 使用项目文件(我自己从未这样做过):
mcc -F <projectfile>
此外,如果您在 Windows 上使用 R2009a,则存在一个 已知错误,需要进行一些清单操作。