Чтобы распространять функцию, которую я написал, которая зависит от других функций, которые я написал, которые имеют свои собственные зависимости и так далее, без распространения каждого m-файла, который я когда-либо писал, мне нужно выяснить, каков полный список зависимостей для данного m-файла. Есть ли встроенный / свободно загружаемый способ сделать это?
В частности, меня интересуют решения для MATLAB 7.4.0 (R2007a), но если есть другой способ сделать это в более старых версиях, обязательно добавьте их сюда.
Для более новых выпусков Matlab (например, 2007 или 2008) вы можете использовать встроенные функции:
Другой вариант - использовать профилировщик Matlab. Это команда profile, ее также можно использовать для отслеживания зависимостей. Чтобы использовать профиль, вы можете сделать
>> profile on % turn profiling on
>> foo; % entry point to your matlab function or script
>> profile off % turn profiling off
>> profview % view the report
Если профилировщик недоступен, возможно, следующие две функции (для pre-MATLAB 2015a):
Например,
>> deps = depfun('foo');
дает структуру deps, которая содержит все зависимости foo.m.
Из ответов 2 и 3, более новые версии MATLAB (после 2015a) вместо этого используют matlab.codetools.requiredFilesAndProducts
.
Посмотри ответы
Обновлено:
Предостережения благодаря комментариям @Mike Katz
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.
Depfun более надежен, но дает вам все, что только может придумать, и по-прежнему пропускает LOAD и EVAL.
Спасибо @Mik Katz за предостережения.
Попробуйте exportToZip (ссылка: mathworks.com/matlabcentral/fileexchange/10702). Выбор недели 18 сентября 2009 г. (ссылка: blogs.mathworks.com/pick/2009/09/18/…)
Обновление: в MATLAB 2015b были удалены depfun и depdir (см. Ответ ниже)
Для MATLAB 2015a
и более поздних версий желательно посмотреть matlab.codetools.requiredFilesAndProducts
или doc matlab.codetools.requiredFilesAndProducts
потому что depfun
помечен для удаления в будущем выпуске.
Помните, что Profiler покажет вам только те файлы, которые фактически использовались в этих запусках, поэтому, если вы не пройдете через каждую ветку, у вас могут быть дополнительные зависимости. Репот зависимостей - хороший инструмент, но разрешает только статические зависимости от пути и только для файлов в одном каталоге.