makedepend эквивалент для использования с nmake? - PullRequest
10 голосов
/ 03 июня 2009

Просто интересно, есть ли эквивалент 'makedepends', который поставляется с visual studio, который я могу использовать с nmake. Кто-нибудь знает?

Ответы [ 3 ]

7 голосов
/ 24 июня 2009

Вы можете использовать переключатель /showIncludes на cl.exe, чтобы получить список заголовков #include d по исходным файлам. Вложенные включения обозначены отступом с пробелами. Вы также можете включить режим проверки синтаксиса с помощью переключателя /Zs, чтобы увеличить скорость и избежать создания файлов .obj.

Если у вас установлен Perl и установлена ​​версия uniq (например, из GnuWin32 ), следующий однострочный выводит список уникальных заголовков, используемых myfile.cpp:

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

Не должно быть слишком сложно передать это через другой скрипт, который создает соответствующие nmake правила.

3 голосов
/ 08 октября 2011

Полагаю, вы используете NMAKE для создания проекта, подобного мне. Мне также нужен инструмент, похожий на makedepend в Windows. Итак, я использую MinGW для генерации зависимостей заголовка. Сначала создайте Makefile для генерации зависимостей, которые я назвал Makedepends, например:

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

    all: Makefile.deps

    Makefile.deps: $(OBJS:.obj=.dep)
        cat $+ > $@
        rm -f $+

    %.dep: %.cpp
        g++ -MM -MG -MT$(@:.dep=.obj) -o$@ $<

В вашем Makefile, который будет использоваться NMAKE, добавьте эту строку внизу:

    !INCLUDE Makefile.deps

Если вы хотите создать зависимости, запустите GMAKE следующим образом:

    make -fMakedepends

А затем вы можете построить свой проект с помощью NMAKE как обычно:

    nmake

PS: извините за плохой язык, я не умею писать. -_-

2 голосов
/ 18 марта 2016
.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 -MT$@ -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
...