用于nmake的makedepend等效工具?

13

我想知道是否有“makedepends”的等效物与Visual Studio一起发布,可以在使用nmake时使用。有人知道吗?

3个回答

9
你可以使用/showIncludes开关来列出源文件#include的头文件,嵌套包含的头文件通过缩进空格表示。你还可以使用/Zs开关打开语法检查模式,以提高速度并避免创建.obj文件。
如果你安装了Perl和uniq的版本(例如从GnuWin32获取),那么下面的一行代码将输出myfile.cpp使用的唯一头文件列表:
cl /Zs /showIncludes /EHsc myfile.cpp | perl -ne "print if s/^Note: including file: *//" | sort | uniq

将此内容通过另一个脚本传输并创建相关的nmake规则应该不会太困难。


太完美了。我已经寻找那个/Zs很久了。我更喜欢使用grep -vsed的组合,而不是perl - Ayman Salah
1
让我去试着找一下我把 Perl 埋在后花园的地方... - Craig McQueen

5

我假设你和我一样使用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$@ $<

在将要被NMAKE使用的Makefile中,最后添加这一行:
    !INCLUDE Makefile.deps

当您想要创建依赖项时,请像这样运行GMAKE:
    make -fMakedepends

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

    nmake

提示:抱歉语言表达能力有限,我不擅长写作。 -_-


需要翻译的内容未给出,请提供更具体的信息。

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

1
这应该展示在“CMD英雄博物馆”中!(顺便说一句,如果能扩展到.cpp文件就更好了。这需要更多的相同毒药,因为这种语言中没有OR,唯一可能愿意将其转换为嵌套的“if not”的人可能是那个在答案中做过那件事的人。) - Sz.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接