8

我有一个复杂的 MATLAB-Simulink 项目,涉及许多 m 文件和 mdl 文件。一些 m 文件定义了在其他 m 文件中使用的变量(我知道设计不好,但它是遗留代码)。还有一些不再使用的功能。

我需要一种自动的方法来查找未使用的变量和函数,以便我可以删除它们并使整个事情变得不那么复杂。理想情况下,我应该有一个脚本/工具,它将项目根目录的名称作为输入,扫描子目录中的所有文件,并输出所有未在任何 m 文件或 mdl 文件中使用的变量和函数。

我知道我可以找到 mdl 文件中未使用的变量(请参阅提示和技巧 - 在 Simulink 模型中跟踪变量)。我想将该方法应用于项目中的所有文件。

我检测未在 m 文件中使用的变量的想法是将所有 m 文件临时组合到一个文件中并在其上运行mlint。有更好的想法吗?

4

1 回答 1

8

无需执行将所有 m 文件粘贴到一个以运行MLINT的繁琐(并且可能容易出错)任务,您还有其他一些选择...

如果您将所有文件都放在一个文件夹中,最简单的方法是转到当前文件夹浏览器,单击“操作”按钮替代文字,然后选择“报告”>“代码分析器报告”

替代文字

这将打开一个新窗口,显示当前目录中每个 m 文件的 MLINT 结果:

替代文字

如果您宁愿使用脚本自动执行该过程,而不必单击菜单选项,那么 MathWorks 文件交换(此处此处)上的一些提交似乎在目录结构上递归地工作,而不仅仅是单个目录。

此外,这里有一些示例代码可以为单个目录执行您想要的操作:

dirData = dir;                 %# Get data on the current directory contents
fileIndex = ~[dirData.isdir];                 %# Get an index for the files
fileNames = {dirData(fileIndex).name};        %# Get the file names
[~,~,ext] = cellfun(@fileparts,fileNames,...  %# Get the file extensions
                    'UniformOutput',false);
mFileIndex = strcmp(ext,'.m');                %# Get an index for the m-files
cellfun(@mlint,fileNames(mFileIndex));        %# Run MLINT on each m-file

您可以通过这种方式扩展文件名(和路径)的集合,以便在目录树上递归操作,然后在您收集的结果文件集上运行 MLINT。

于 2011-01-18T15:40:25.663 回答