In order to distribute a function I've written that depends on other functions I've written that have their own dependencies and so on without distributing every m-file I have ever written, I need to figure out what the full list of dependencies is for a given m-file. Is there a built-in/freely downloadable way to do this?
Specifically I am interested in solutions for MATLAB 7.4.0 (R2007a), but if there is a different way to do it in older versions, by all means please add them here.
There are several types of functions available with MATLAB®, including local functions, nested functions, private functions, and anonymous functions. To determine which function to call when multiple functions in the current scope have the same name, MATLAB uses function precedence order.
To create a script or live script with local functions, go to the Home tab and select New Script or New Live Script. Then, add code to the file. Add all local functions at end of the file, after the script code. Include at least one line of script code before the local functions.
The body of a function can include valid MATLAB expressions, control flow statements, comments, blank lines, and nested functions. Any variables that you create within a function are stored within a workspace specific to that function, which is separate from the base workspace.
For newer releases of Matlab (eg 2007 or 2008) you could use the built in functions:
Another option is to use Matlab's profiler. The command is profile, it can also be used to track dependencies. To use profile, you could do
>> profile on % turn profiling on >> foo; % entry point to your matlab function or script >> profile off % turn profiling off >> profview % view the report
If profiler is not available, then perhaps the following two functions are (for pre-MATLAB 2015a):
For example,
>> deps = depfun('foo');
gives a structure, deps, that contains all the dependencies of foo.m.
From answers 2, and 3, newer versions of MATLAB (post 2015a) use matlab.codetools.requiredFilesAndProducts
instead.
See answers
EDIT:
Caveats thanks to @Mike Katz comments
Remember that the Profiler will only show you files that were actually used in those runs, so if you don't go through every branch, you may have additional dependencies. The dependency report is a good tool, but only resolves static dependencies on the path and just for the files in a single directory.
Depfun is more reliable but gives you every possible thing it can think of, and still misses LOAD's and EVAL's.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With