参加一个nmake项目,特别是Ruby,并试图确切地看到用于构建它的命令。 nmake说它正在编译什么文件,但不是它用来编译每个文件的命令行。与显然相关的选项最接近的是/ D,但这并没有对它产生太大的影响。
有没有办法,通过为nmake或其他方式提供一些选项,以确切地查看它发出的命令?
答案 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