2009-06-03 28 views
9

Sadece nmake ile kullanabileceğim görsel stüdyo ile birlikte gelen 'makedepends' eşdeğeri olup olmadığını merak ediyorum. Kimse biliyor mu?makedepend eşdeğeri?

cevap

7

Kaynak dosyalarınızın üstbilgileri #include d listelemelerini kullanabilirsiniz. İç içe geçmişler boşluklarla girinti ile gösterilir. Hızı artırmak ve .obj dosyalarının oluşturulmasını önlemek için /Zs anahtarıyla sözdizimi denetim modunu da açabilirsiniz.

Eğer Perl ve uniq bir sürümünü (GnuWin32 gelen örn) yüklüyse, aşağıdaki tek satırlık myfile.cpp tarafından kullanılan eşsiz başlıkların listesini dökümü olacaktır:

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

Bu çok zor olmamalı Bunu, ilgili nmake kurallarını oluşturan başka bir komut dosyasıyla borulayın.

3

Benim gibi bir proje oluşturmak için NMAKE kullandığınızı farz ediyorum. Windows'da da makedepend benzeri bir araca ihtiyacım var. Yani, başlık bağımlılıkları oluşturmak için MinGW kullanıyorum.

NMAKE tarafından kullanılacak sizin Makefile içinde
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] $< 

, altta bu satırı ekleyin:

!INCLUDE Makefile.deps 

sen istediğinizde Önce böyle, Makedepends adında hangi bağımlılıklar oluşturmak için Makefile oluşturmak her zamanki gibi NMAKE projenizi inşa edebilirsiniz,

make -fMakedepends 

Ve sonra: böyle gmake çalıştırın bağımlılıklar oluşturmak

nmake 

PS: Kötü dil için özür dilerim, yazı yazarım. -_-

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