Чтобы распространить написанную мной функцию, которая зависит от других написанных мной функций, которые имеют свои собственные зависимости и т.д., не распространяя каждый m файл, который я когда-либо писал, мне нужно выяснить, что собой представляет полный список зависимостей для данного m файла. Есть ли встроенный/свободно загружаемый способ сделать это?
В частности, меня интересуют решения для MATLAB 7.4.0 (R2007a), но если есть другой способ сделать это в более старых версиях, обязательно добавьте их здесь.
Для более новых версий Matlab (например, 2007 или 2008) вы можете использовать встроенные функции:
Другой вариант - использовать профилировщик Matlab. Команда является профилем, ее также можно использовать для отслеживания зависимостей. Чтобы использовать профиль, вы можете сделать
>> 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 (post 2015a) Вместо этого используйте matlab.codetools.requiredFilesAndProducts
.
См. ответы
EDIT:
Предостережения благодаря комментариям @Mike Katz
Помните, что Profiler будет покажите файлы, которые были фактически использованы в этих прогонах, так что если вы не пойдете через каждую ветвь, вы можете иметь дополнительные зависимости. отчет о зависимости - хороший инструмент, но разрешает только статические зависимости путь и только файлы в единый каталог.
Depfun более надежный, но дает вам все возможное, о чем он может думать, и все еще пропускает LOAD и EVAL's.
Для MATLAB 2015a
и более поздних версий лучше посмотреть matlab.codetools.requiredFilesAndProducts
или doc matlab.codetools.requiredFilesAndProducts
потому что depfun
помечен для удаления в будущей версии.
Обновление: для MATLAB 2015b, depfun и depdir были удалены, поэтому вы должны использовать matlab.codetools.requiredFilesAndProducts().