2009-06-03 9 views

Respuesta

7

Puede usar el /showIncludes switch to cl.exe para enumerar los encabezados #include d por sus archivos fuente. Las inserciones anidadas se indican con sangría con espacios. También puede activar el modo de comprobación de la sintaxis con el interruptor /Zs, para aumentar la velocidad y evitar la creación de archivos .obj.

Si tiene Perl y una versión de uniq (por ejemplo, de GnuWin32) instalado, el siguiente de una sola línea volcará la lista de cabeceras únicas utilizado por myfile.cpp:

cl /Zs /showIncludes /EHsc myfile.cpp | perl -ne "print if s/^Note: including file: *//" | sort | uniq 

no debería ser demasiado difícil de canalice esto a través de otra secuencia de comandos que crea las reglas relevantes nmake.

3

Supongo que utiliza NMAKE para crear proyectos como yo. También necesito una herramienta parecida a makedepend en Windows. Por lo tanto, uso MinGW para generar dependencias de encabezado. En primer lugar crear Makefile para generar dependencias, que he denominado makedepends, así:

OBJS=... list object files in your project... 

    all: Makefile.deps 

    Makefile.deps: $(OBJS:.obj=.dep) 
     cat $+ > [email protected] 
     rm -f $+ 

    %.dep: %.cpp 
     g++ -MM -MG -MT$(@:.dep=.obj) [email protected] $< 

En su Makefile que será utilizado por NMAKE, añadir esta línea en la parte inferior:

!INCLUDE Makefile.deps 

Cuando desee crear dependencias, ejecute GAsegúrese así:

make -fMakedepends 

Y entonces, usted puede construir su proyecto con NMAKE como de costumbre:

nmake 

PD: Perdón por el lenguaje pobre, estoy apenado por escrito. -_-

1
.SUFFIXES: 
.SUFFIXES: .c 

all: x.obj 

# Sample batch-mode rule which both compiles and produces .dep files suitable for NMAKE. 
# Also works around the fact that CL.EXE spits diagnostics in stdout instead of stderr. 
# This is equivalent to -MD -MP [email protected] -MF$(@R).dep in GNU Make + GCC. 
CCOMMAND = $(CC) $(CFLAGS) /c $< 
.c.obj:: 
!IF "$(MAKEFLAGS:S=)" == "$(MAKEFLAGS)" 
    @echo " $(CCOMMAND)" 
!ENDIF 
    @$(COMSPEC) /E:ON /V:ON /C "$(CCOMMAND) /showIncludes & echo Exit: !ERRORLEVEL!" | \ 
     $(COMSPEC) /E:ON /V:ON /C "for /f "tokens=1,* delims=]" %%A in ('find /v /n ""') do \ 
     @if %%~xB == .c (set _=%%~nB&rem.>!_!.dep&echo %%B) else for /f "tokens=1,2,3,*" %%C in ("%%B") do \ 
     @if %%C == Note: ((echo !_!.obj: "%%F"&echo "%%F":) >> !_!.dep) \ 
     else if %%C == Exit: (exit /b %%D) else echo %%B" 

# Include the generated deps. 
!IF ![(for %i in (*.dep) do @echo !INCLUDE %i) >Build.tmp] 
!  INCLUDE Build.tmp 
!  IF ![del Build.tmp] 
!  ENDIF 
!ENDIF