我有一个涉及许多m文件和mdl文件的复杂的MATLAB-Simulink项目。一些m文件定义了在其他m文件中使用的变量(我知道设计不好,但这是旧代码)。还有一些不再使用的功能。
我需要一种自动的方法来查找未使用的变量和函数,以便可以删除它们并简化整个过程。理想情况下,我应该具有一个脚本/工具,该脚本/工具将项目的根目录名称作为输入,扫描子目录中的所有文件,并输出所有未在任何m文件或mdl文件中使用的变量和函数。
我知道我可以找到mdl文件中未使用的变量(请参见
提示和技巧-Simulink模型中的跟踪变量 )。我想将该方法应用于项目中的所有文件。
我检测未在m文件中使用的变量的想法是将所有m文件临时组合到一个文件中,并在
其上运行
mlint 。还有更好的主意吗?
回答:
除了完成将所有m文件粘贴到一个文件中以运行
MLINT的繁琐(并且可能容易出错)的任务
之外 ,您还有其他一些选择...
如果所有文件都放在一个文件夹中,最简单的方法是转到“当前文件夹”浏览器,单击“
操作”按钮

,然后选择
报告>代码分析器报告 。
这将打开一个新窗口,显示当前目录中每个m文件的MLINT结果:
如果您希望使用脚本来自动化该过程,而不必单击菜单选项,那么MathWorks File Exchange上的一些提交(
此处和
此处 )似乎是在目录结构上递归地工作,而不是单个目录。
另外,这是一些示例代码,它们将对单个目录执行您想要的操作:
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。
更多&回答...