makedepend是否与nmake一起使用?

11 nmake makefile visual-studio-2008 visual-c++

只是想知道是否有与视觉工作室一起提供的'makedepends'等效物,我可以使用nmake.有人知道吗?

j_r*_*ker 8

您可以使用/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
Run Code Online (Sandbox Code Playgroud)

通过另一个创建相关nmake规则的脚本来管理它应该不会太困难.


小智 5

我假设您像我一样使用 NMAKE 来构建项目。我也需要在 Windows 中使用类似 makedepend 的工具。因此,我使用 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$@ $<
Run Code Online (Sandbox Code Playgroud)

在 NMAKE 将使用的 Makefile 中,在底部添加以下行:

    !INCLUDE Makefile.deps
Run Code Online (Sandbox Code Playgroud)

当你想创建依赖项时,像这样运行 GMAKE:

    make -fMakedepends
Run Code Online (Sandbox Code Playgroud)

然后,您可以像往常一样使用 NMAKE 构建您的项目:

    nmake
Run Code Online (Sandbox Code Playgroud)

PS:对不起,语言不好,我写作很烂。-_-


ale*_*cov 5

.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
Run Code Online (Sandbox Code Playgroud)