Matlab deployment: add files to source control?

2.8k views Asked by At

I've created a deployment project which works rather well and now I want to add it to source control repository for others to use.
The main problem I'm facing is that the .prj file which deploytool creates contains absolute paths which will not work on other computers. So far I've tried the following:

  • Create the stand alone exe using just mcc without deploytool. This works great but I could find a way to create the final _pkg.exe which contains everything. mcc doesn't seem to be able to create this file and there doesn't seem to be any other tool which does. Is this really the case?
  • Edit the .prj file to include relative paths instead of absolute paths. This only works partially because the .prj file contains a section called MATLABPath which is always replaced with the current setpath of matlab. anyone which uses this file will have to check it out since it is being changed when used.
  • Find a way to generate the .prj file. the mcc documentation say: Project files created using either mcc or deploytool are eligible to use this option. suggesting there is a way to create a .prj file using mcc but I wasn't able to find how this can be done.

Is there a solution to this situation?

3

There are 3 answers

0
Thomas On

I personally use Visual Studio 2005 project to maintain my deployment projects and then convert the VCPROJ to PRJ on the fly using build command step http://younsi.blogspot.com/2011/11/matlab-relative-path-issue-in-prj.html

2
mtrw On

Here's the mcc option documentation.

What I've found most useful is creating a standalone exe using mcc:

  mcc -C -m <function.m> -a <fig> -a <dll> -a <etc> -d <outputPath>

The -C option tells mcc to generate the ctf file (which is the archive of all the compiled MATLAB stuff) as a separate file. I've had trouble on some target computers using a single exe with everything compiled in.

The -m option tells mcc to make an exe.

The -a options tell mcc to include the specified file in the package. For instance, if your script uses two fig files and a data file, you need a -a for each to make sure they get put in the output package.


To tell mcc to use a project file (I've never done this myself):

 mcc -F <projectfile>

Also, if you're using R2009a on Windows, there's a known bug that requires some manifest manipulation.

0
Jan Schiefer On

We ran into the same thing with Matlab Builder JA. Not only are the paths absolute, Matlab also adds other toolboxes that it finds on the path, which is irritating, as the build machine doesn't have licenses for a lot of them.

So what we do is:

  • Edit the prj file by hand to get rid of the absolute paths
  • Check it into source control and build with mcc
  • NEVER EVER check in the prj file after it has been touched by deploytool (do all changes by hand in an editor)

Our revision control lets you modify files without an explicit checkout, so using deploytool is not a problem. But why would you want to?

Not sure what the final packager does, but if it just bundles the MCR with the compiled binary, I would just write a replacement.