2009-11-23 7 views
6

Me gustaría generar automáticamente una lista de dependencia de Makefile, pero estoy usando Visual Studio 2005. Si estuviera usando GCC, podría pasar -M (o una de las muchas variantes) para crear esta lista de dependencias.¿El compilador de Visual Studio C tiene un equivalente a GCC's -M?

Mirando a través de las opciones de línea de comandos a cl.exe, no veo nada obvio. Puedo manejar ajustar la salida con post-procesamiento, pero cuanto más cerca, mejor.

Respuesta

3

que tenía que hacer frente a ese problema exacto. Queríamos agregar una secuencia de comandos que reemplaza la opción -M. Así es como lo hice:

  1. encontrar un preprocesador fuente (y la incluyen rutas & define que necesita)
  2. ejecutarlo en el archivo que necesita, y debe producir una versión pre-procesado.
  3. la mayoría de los pre-procesadores tienen un interruptor que permite que información adicional (por ejemplo, el archivo donde algunos fragmento de código viene)
  4. escribir un script sencillo para extraer todos los nombres de encabezado
  5. crear un conjunto de ellos, de modo que usted filtrar duplicados.

Así lo hice, y funcionó. ¡Buena suerte!

+0

¿Algún puntero al (a los) preprocesador (es) que utilizó? – Shepmaster

+2

Puede usar Visual Studio para esta tarea. Un preprocesador independiente bastante bueno es 'mcpp'. Puede encontrarlo aquí 'http: // mcpp.sourceforge.net /'. – Geo

+0

No lo he implementado todavía, pero esta parece ser la mejor solución. El uso de Visual Studio suena como la ruta correcta, y evita tener que tener conjuntos separados de indicadores para pasar (uno para dependencias y otro para compilar). – Shepmaster

0

No directamente con cl.exe, pero con este envoltorio se puede lograr lo que estás buscando:

http://msdn.microsoft.com/en-us/library/y209k0z6.aspx

+0

¿Funciona eso con la bandera '-M' de gcc? La mayoría de las asignaciones de indicadores del compilador serían triviales, pero esa requiere bastante el preprocesador (o algo similar) para ejecutarse. –

+0

El compilador de VC++ tiene una opción de solo preprocesamiento, pero no lo hará. La configuración '-M. *' Que desea el OP está entre las que no admite ese paquete. Consulte la parte inferior de 'ccFile.cfg', si lo tiene instalado, o http://pastebin.com/m1707aa02 –

0

Tuvimos exactamente el mismo problema con Fortran, y tuvimos que escribir nuestro propio mini-compilador para escanear el código fuente y recorrer todos los #includes.

+0

¿cuánto tiempo tienes para hacer esto? – Geo

5

En el cl.exe de Visual Studio 2005 al menos, existe la opción /showIncludes.

2

El compilador almacena dependencias en el archivo intermedio .idb. Es posible que pueda analizarlo desde allí.

Ver https://msdn.microsoft.com/en-us/library/kfz8ad09.aspx

Usted puede encontrar todo su contenido con el prefijo "/ mr/inversedeps /" o "/ IPM/cabecera /" en ese país, lo que parece.


Creo que también debería encontrar dependencias en otros archivos intermedios, p. "CL.read.1.tlog".

Cuestiones relacionadas