查看 nmake 发出了啥命令

Posted

技术标签:

【中文标题】查看 nmake 发出了啥命令【英文标题】:Seeing what commands nmake is issuing查看 nmake 发出了什么命令 【发布时间】:2015-06-22 11:39:29 【问题描述】:

创建一个 nmake 项目,特别是 Ruby,并尝试查看构建它所使用的确切命令。 nmake 说明它正在编译哪些文件,但没有说明它用于编译每个文件的命令行。与明显相关的选项最接近的是 /D,但这并不能说明太多。

有没有办法,通过向 nmake 提供一些选项或其他方式,来查看它正在发出什么命令?

【问题讨论】:

【参考方案1】:

没有一种通用的方法可以使所有命令都被回显,例如使用命令选项。但是,您可以自己构建这样的选项,但它确实涉及对 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)”(当然,所有其他@ 符号保持不变!)。

【讨论】:

【参考方案2】:

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

> nmake /F example.mak /A /N

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

【讨论】:

以上是关于查看 nmake 发出了啥命令的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 Facebook 机器人查看用户使用他的个人资料“喜欢”了啥?

使用 discord.py 时在控制台中没有收到错误消息,我如何查看出了啥问题?

nmake:是不是可以禁用编译警告?

有啥办法可以查看微信好友关注了啥公众号?

nmake u1034 分隔符丢失

怎么在lr工具的结果分析报告中查看报了啥错