2008-09-18 11 views
36

Para distribuir una función que he escrito que depende de otras funciones que he escrito que tienen sus propias dependencias y demás sin distribuir cada archivo-m que he escrito, necesito averiguar cuál es la lista completa de dependencias es para un archivo m dado. ¿Hay una forma incorporada/libremente descargable para hacer esto?¿Cómo puedo generar una lista de dependencias de funciones en MATLAB?

Específicamente estoy interesado en las soluciones para MATLAB 7.4.0 (R2007a), pero si hay una manera diferente de hacerlo en versiones anteriores, por favor, agréguelas aquí.

Respuesta

35

Para las versiones más recientes de Matlab (por ejemplo, 2007 o 2008) se puede utilizar el construido en funciones:

  1. mlint
  2. informe de la dependencia y
  3. informe de cobertura

Otra opción es para usar el generador de perfiles de Matlab. El comando es perfil, también se puede usar para rastrear dependencias. Para utilizar el perfil, se puede hacer

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

Si perfilador no está disponible, entonces tal vez las dos funciones siguientes son (para pre-MATLAB 2015A):

  1. depfun
  2. depdir

Por ejemplo,

>> deps = depfun('foo'); 

da una estructura, deps, que contiene todas las dependencias de foo.m.

Desde respuestas 2 y 3, las nuevas versiones de MATLAB (post 2015A) utilizan matlab.codetools.requiredFilesAndProducts lugar.

Ver las respuestas

EDIT:

Advertencias gracias a @ Mike Katz comenta

  • Recuerde que la única Profiler le mostrará los archivos que realmente se utilizaron en aquellas carreras , por lo que si no va al en todas las sucursales, puede tener dependencias adicionales. El informe de dependencia es una buena herramienta, pero solo resuelve las dependencias estáticas en la ruta y solo para los archivos en un solo directorio .

  • Depfun es más fiable pero da a cada cosa posible que se pueda imaginar, y todavía pierde CARGA de EVAL y de.

+2

Recuerde que Profiler solo le mostrará los archivos que se usaron en realidad en esas ejecuciones, por lo que si no visita todas las ramas, es posible que tenga dependencias adicionales. El repot de dependencia es una buena herramienta, pero solo resuelve dependencias estáticas en la ruta y solo para los archivos en un solo directorio. –

+3

Depfun es más confiable pero le ofrece todo lo que se le ocurre, y aún echa de menos LOAD y EVAL. –

+0

Gracias @Mik Katz por las advertencias. – Azim

6

Para MATLAB 2015a y más tarde usted debe buscar preferentemente a matlab.codetools.requiredFilesAndProducts

o doc matlab.codetools.requiredFilesAndProducts

porque depfun está marcado para ser eliminado en una versión futura.

1

Actualización: para MATLAB 2015b, depfun y depdir se han eliminado, por lo que debe utilizar matlab.codetools.requiredFilesAndProducts().

+0

Esto ya fue escrito en otra respuesta hace un año. –

Cuestiones relacionadas