看看nmake正在发布什么命令

时间:2015-06-22 11:39:30

标签: windows visual-studio nmake

参加一个nmake项目,特别是Ruby,并试图确切地看到用于构建它的命令。 nmake说它正在编译什么文件,但不是它用来编译每个文件的命令行。与显然相关的选项最接近的是/ D,但这并没有对它产生太大的影响。

有没有办法,通过为nmake或其他方式提供一些选项,以确切地查看它发出的命令?

2 个答案:

答案 0 :(得分:2)

没有通用的方法可以回显所有命令,例如使用命令选项。但是,可以自己构建这样的选项,但它确实涉及对Makefile进行全局编辑。但是,通过巧妙地使用编辑器(例如与正则表达式匹配的编辑器),您可以快速进行更改并获得所需的内容。

本博客文章中描述了该技术: Writing Portable Makefiles ,第5节。

每个makefile实现都允许命令由@符号继续,这会导致回显被禁用。该技术是使用宏代替@符号,例如在此示例中Makefile:

!MESSAGE Makeflags=$(MAKEFLAGS)

!IFNDEF LOG
L=@
!ELSE
!  IF  [ IF /I $(LOG) == yes ( EXIT 1 ) ELSE ( EXIT 0 ) ] == 0
L=@
!ELSE
L=
!ENDIF
!ENDIF
# To be a valid makefile it must have some rules to perform
all:
    $(L)echo;This is a command being executed

这可以证明:

C:\Users\Brian>nmake /NOLOGO
Makeflags=L
This is a command being executed

C:\Users\Brian>nmake /NOLOGO LOG=yes
Makeflags=L
        echo;This is a command being executed
This is a command being executed

C:\Users\Brian>nmake /NOLOGO LOG=no
Makeflags=L
This is a command being executed

然后,剩下的就是将命令开头的每个@更改为'$(L)'(当然,保留所有其他@符号不变!)。

答案 1 :(得分:2)

我使用/N显示命令行,并使用/A运行所有目标(不仅仅是过期的目标)。

> nmake /F example.mak /A /N

文档:https://msdn.microsoft.com/en-us/library/afyyse50.aspx