2008-09-18 12 views
36

Aby dystrybuować funkcję, którą napisałem, która zależy od innych funkcji, które napisałem, które mają swoje własne zależności i tak dalej, bez rozprowadzania każdego pliku m, jaki kiedykolwiek napisałem, muszę się dowiedzieć, jaka jest pełna lista zależności dla danego m-pliku. Czy istnieje wbudowany/swobodnie do pobrania sposób, aby to zrobić?Jak wygenerować listę zależności funkcji w MATLAB?

W szczególności interesują mnie rozwiązania do MATLAB 7.4.0 (R2007a), ale jeśli jest inny sposób, aby to zrobić w starszych wersjach, dodaj je tutaj.

Odpowiedz

35

Dla nowszych wersjach Matlab (np 2007 lub 2008) można użyć wbudowanego w funkcji:

  1. mlint
  2. raport zależność i
  3. raport pokrycia

Inną opcją jest korzystać z profilera Matlaba. Polecenie jest profilem, może być również używane do śledzenia zależności. Aby korzystać z profilu, można zrobić

>> profile on % turn profiling on 
>> foo;   % entry point to your matlab function or script 
>> profile off % turn profiling off 
>> profview  % view the report 

Jeśli profiler nie jest dostępna, to może dwa następujące funkcje (w przedsprzedaży MATLAB 2015a):

  1. depfun
  2. depdir

Na przykład:

>> deps = depfun('foo'); 

daje strukturę, deps, która zawiera wszystkie zależności foo.m.

Z odpowiedzi na pytania 2 i 3, nowsze wersje MATLAB (po 2015a) używają zamiast tego matlab.codetools.requiredFilesAndProducts.

zobaczyć odpowiedzi

EDIT:

Ostrzeżenia dzięki @Mike Katz komentuje

  • Pamiętaj, że Profiler tylko pokazać, że pliki, które zostały faktycznie wykorzystane w tych seriach , więc jeśli nie przejdziesz przez przez każdy oddział, możesz mieć dodatkowe zależności od . Raport zależności jest dobrym narzędziem, ale rozwiązuje tylko zależności statyczne na ścieżce i tylko dla plików z pojedynczego katalogu .

  • Depfun jest bardziej niezawodny, ale daje każdą możliwą rzecz, jaką może wymyślić, i nadal brakuje LOAD i EVAL.

+2

Pamiętaj, że Profiler wyświetli tylko te pliki, które były faktycznie używane w tych uruchomieniach, więc jeśli nie przejdziesz przez wszystkie gałęzie, możesz mieć dodatkowe zależności. Repot zależności jest dobrym narzędziem, ale rozwiązuje tylko statyczne zależności na ścieżce i tylko dla plików w jednym katalogu. –

+3

Depfun jest bardziej niezawodny, ale daje ci wszystko, co tylko możliwe, i nadal nie trafia w LOAD i EVAL. –

+0

Dzięki @Mik Katz za ostrzeżenia. – Azim

6

Dla MATLAB 2015a i później powinieneś najlepiej spojrzeć na matlab.codetools.requiredFilesAndProducts

lub doc matlab.codetools.requiredFilesAndProducts

ponieważ depfun oznaczony zostać usunięte w przyszłej wersji.

1

Aktualizacja: dla MATLAB 2015b, depfun i depdir zostały usunięte, więc musisz użyć matlab.codetools.requiredFilesAndProducts().

+0

Zostało to już napisane w innej odpowiedzi sprzed roku. –