只是想知道是否有一个“makedepends”等价物随视觉工作室一起提供,我可以与 nmake 一起使用。有人知道吗?
Andrew
问问题
3073 次
3 回答
9
您可以使用/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
通过另一个创建相关规则的脚本进行管道传输应该不会太难。
于 2009-06-24T17:03:45.993 回答
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$@ $<
在 NMAKE 将使用的 Makefile 中,在底部添加以下行:
!INCLUDE Makefile.deps
当你想创建依赖项时,像这样运行 GMAKE:
make -fMakedepends
然后,您可以像往常一样使用 NMAKE 构建您的项目:
nmake
PS:抱歉语言不好,我写的很烂。-_-
于 2011-10-08T07:03:19.510 回答
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
于 2016-03-18T18:15:13.423 回答