我想知道是否有“makedepends”的等效物与Visual Studio一起发布,可以在使用nmake时使用。有人知道吗?
我想知道是否有“makedepends”的等效物与Visual Studio一起发布,可以在使用nmake时使用。有人知道吗?
/showIncludes
开关来列出源文件#include
的头文件,嵌套包含的头文件通过缩进空格表示。你还可以使用/Zs
开关打开语法检查模式,以提高速度并避免创建.obj文件。uniq
的版本(例如从GnuWin32获取),那么下面的一行代码将输出myfile.cpp
使用的唯一头文件列表:cl /Zs /showIncludes /EHsc myfile.cpp | perl -ne "print if s/^Note: including file: *//" | sort | uniq
将此内容通过另一个脚本传输并创建相关的nmake
规则应该不会太困难。
我假设你和我一样使用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$@ $<
!INCLUDE Makefile.deps
make -fMakedepends
然后,您可以像往常一样使用NMAKE构建您的项目:
nmake
提示:抱歉语言表达能力有限,我不擅长写作。 -_-
.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
/Zs
很久了。我更喜欢使用grep -v
和sed
的组合,而不是perl
。 - Ayman Salah