2008-09-18 11 views
36

Um eine Funktion zu verteilen, die ich geschrieben habe, hängt das von anderen Funktionen ab, die ich geschrieben habe, die ihre eigenen Abhängigkeiten haben und so weiter, ohne jede m-Datei zu verteilen, die ich je geschrieben habe, muss ich herausfinden, was die vollständige Liste von Abhängigkeiten ist für eine bestimmte m-Datei. Gibt es einen eingebauten/frei herunterladbaren Weg, dies zu tun?Wie kann ich eine Liste von Funktionsabhängigkeiten in MATLAB generieren?

Ich interessiere mich speziell für Lösungen für MATLAB 7.4.0 (R2007a), aber wenn es eine andere Möglichkeit gibt, es in älteren Versionen zu tun, fügen Sie sie bitte hier hinzu.

Antwort

35

Für neuere Versionen von Matlab (zB 2007 oder 2008) Sie die integrierten Funktionen verwenden:

  1. mlint
  2. Abhängigkeitsbericht und
  3. Berichterstattung Bericht

Eine weitere Option ist den Profiler von Matlab zu verwenden. Der Befehl ist ein Profil, es kann auch zum Nachverfolgen von Abhängigkeiten verwendet werden. So verwenden Profil, könnten Sie

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

tun Wenn Profiler nicht verfügbar ist, dann vielleicht die folgenden beiden Funktionen sind (für Pre-MATLAB 2015a):

  1. depfun
  2. depdir

Zum Beispiel

>> deps = depfun('foo'); 

gibt eine Struktur, deps, die alle Abhängigkeiten von foo.m enthält.

Von den Antworten 2 und 3 verwenden neuere Versionen von MATLAB (nach 2015a) stattdessen matlab.codetools.requiredFilesAndProducts.

Siehe Antworten

EDIT:

Caveats dank @ Mike Katz kommentiert

  • Denken Sie daran, dass der Profiler wird nur zeigen Sie Dateien, die tatsächlich in diesen Läufen verwendet wurden Wenn Sie also nicht über alle Zweige gehen, verfügen Sie möglicherweise über weitere Abhängigkeiten . Der Abhängigkeitsbericht ist ein gutes Werkzeug, aber löst nur statische Abhängigkeiten auf den Pfad und nur für die Dateien in einem einzigen Verzeichnis.

  • Depfun ist zuverlässiger, aber gibt Ihnen jede mögliche Sache es, denken kann und vermisst noch LOAD ist und EVAL ist.

+2

Denken Sie daran, dass der Profiler nur Dateien anzeigt, die tatsächlich in diesen Läufen verwendet wurden. Wenn Sie nicht jeden Zweig durchlaufen, haben Sie möglicherweise zusätzliche Abhängigkeiten. Der Abhängigkeits-Repot ist ein gutes Werkzeug, löst jedoch nur statische Abhängigkeiten vom Pfad und nur für die Dateien in einem einzigen Verzeichnis auf. –

+3

Depfun ist zuverlässiger, gibt Ihnen aber alles mögliche und vermisst immer noch LOADs und EVALs. –

+0

Danke @Mik Katz für die Vorbehalte. – Azim

6

Für MATLAB 2015a und später sollten Sie vorzugsweise Blick auf matlab.codetools.requiredFilesAndProducts

oder doc matlab.codetools.requiredFilesAndProducts

weil depfun markiert in einer zukünftigen Version entfernt werden.

1

Update: für MATLAB 2015b wurden depfun und depdir entfernt, daher müssen Sie matlab.codetools.requiredFilesAndProducts() verwenden.

+0

Dies wurde bereits vor einem Jahr in einer anderen Antwort geschrieben. –

Verwandte Themen