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
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.
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çindeOBJS=... 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. -_-
.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