NMake .PHONY 模拟

Posted

技术标签:

【中文标题】NMake .PHONY 模拟【英文标题】:NMake .PHONY analogue 【发布时间】:2010-12-22 12:12:34 【问题描述】:

我的 Makefile 中有一个目标 test,我的项目中有一个名为 test 的目录。在 GNU Make 中,我可以像这样声明它是假的:

.PHONY: all compile test clean docs static

是否可以在 NMake 中做同样的事情?根据http://www.bell-labs.com/project/nmake/tutorial/s6.html,我需要做

test: .VIRTUAL

但它不起作用:

F:\SomePath>nmake test /f msvc.mk

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1073: don't know how to make '.VIRTUAL'
Stop.

【问题讨论】:

【参考方案1】:

对于那些在 nmake 中寻找解决这个缺失 .PHONY 的方法的人:

您可以引入一个绝对是伪目标的目标(即选择一个与任何现有文件/目录都不匹配的名称)并使其依赖于您想要成为 .PHONY 的含义。例如:

test: .phony
        dir /b

.phony:

这是输出:

D:\Temp\nmake-phony>nmake

Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        dir /b
Makefile
test

【讨论】:

【参考方案2】:

我想这就是你要找的:

http://msdn.microsoft.com/en-us/library/7sb2acw1%28v=VS.71%29.aspx

伪目标

伪目标是用来代替依赖行中的文件名的标签。它被解释为一个不存在的文件,因此是过时的。 NMAKE 假定伪目标的时间戳是其所有依赖项中最新的。如果它没有依赖项,则假定当前时间。如果将伪目标用作目标,则始终执行其命令。用作依赖项的伪目标也必须作为目标出现在另一个依赖项中。但是,该依赖项不需要有命令块。

伪目标名称遵循目标的文件名语法规则。但是,如果名称没有扩展名(即不包含句点),它可能会超过文件名 8 个字符的限制,最长可达 256 个字符。

如果我理解正确,您在 nmake 中没有 .PHONY(微软的,有很多 nmake 风格)。您发布的链接在顶部指出:

教程:阿尔卡特朗讯 nmake 的一点帮助

也许您可以调用一项测试和另一项测试?

【讨论】:

我实际上已经找到了这个页面,但假设仍然有办法做到这一点,只是没有链接:) 也许没有。

以上是关于NMake .PHONY 模拟的主要内容,如果未能解决你的问题,请参考以下文章

nmake - 模拟 eval 函数

Makefile——.PHONY

Makefile中.PHONY的作用

Makefile 中 .PHONY 的用途是啥?

makefile里的Phony

makefile里PHONY的相关介绍