我该如何在MATLAB中生成函数依赖列表?

36
为了分发我编写的依赖于其他函数的函数,而不必分发我曾经编写过的每个m文件,我需要找出给定m文件的全部依赖关系列表。是否有内置/可免费下载的方法来实现此目的?
具体来说,我对MATLAB 7.4.0 (R2007a)的解决方案感兴趣,但如果在旧版本中有不同的方法,请在这里添加。
2个回答

36

对于较新的Matlab版本(例如2007或2008),您可以使用内置函数:

  1. mlint
  2. 依赖报告和
  3. 覆盖率报告

另一个选择是使用Matlab的分析器。命令是profile,它也可以用于跟踪依赖项。要使用profile,您可以执行以下操作:

>> profile on   % turn profiling on
>> foo;         % entry point to your matlab function or script
>> profile off  % turn profiling off
>> profview     % view the report
如果分析器不可用,那么也许以下两个函数可用(适用于MATLAB 2015a之前的版本):
1. depfun 2. depdir 例如,
>> deps = depfun('foo');

创建一个名为deps的结构,其中包含foo.m的所有依赖项。

根据答案23,MATLAB新版本(2015a之后)使用matlab.codetools.requiredFilesAndProducts代替旧方法。

参见答案。

编辑:

注意事项,感谢@Mike Katz的评论:

  • 请记住,分析器只会显示那些运行中实际使用过的文件,因此如果您没有经过每个分支,可能会有其他依赖项。依赖性报告是一个很好的工具,但只解决路径上的静态依赖关系,并且仅适用于单个目录中的文件。

  • Depfun更可靠,但会给你列出它认为的每个可能需要的东西,并仍然会漏掉LOAD和EVAL。


2
请记住,Profiler 只会显示在这些运行中实际使用的文件,因此如果您没有遍历每个分支,可能会有额外的依赖项。依赖关系报告是一个好工具,但仅解决路径上的静态依赖关系,并且仅适用于单个目录中的文件。 - Mike Katz
3
Depfun相对可靠,但会给出它可以想到的每一个可能性,仍然会错过LOAD和EVAL。 - Mike Katz
感谢 @Mik Katz 提供的警告。 - Azim J
2
尝试使用 exportToZip(链接:http://www.mathworks.com/matlabcentral/fileexchange/10702)。它于2009年9月18日被评为本周之选(链接:http://blogs.mathworks.com/pick/2009/09/18/easier-and-less-error-prone-creation-of-zip-files/)。 - Samil
更新:在MATLAB 2015b中,depfun和depdir已被移除(请参见下面的答案)。 - gariepy

7

对于 MATLAB 2015a 及更高版本,您最好查看 matlab.codetools.requiredFilesAndProducts

或者使用 doc matlab.codetools.requiredFilesAndProducts

因为 depfun 标记为将在未来版本中删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接