免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1905 | 回复: 1
打印 上一主题 下一主题

GNU make 中 makefile 的目标定义规则 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-01 17:33 |只看该作者 |倒序浏览
30可用积分
书上说,如果目标不是一个真实的文件,就是假想工作目标。内置许多这样的目标。
对于这样的目标,不进行文件真实性验证,无条件执行随附的命令。

但我发现如果一个配置文件中出现没有在 .PHONY 命名的假想工作目标。
make 不会给出任何警告信息。

只是在 -p 打印出来的文档中写出。

#  Implicit rule search has been done.
#  File does not exist.
#  File has been updated.
#  Successfully updated.

是不是可以用一个不存在的假想目标作为依存条件,而不必事先声明。

最佳答案

查看完整内容

显然可以使用.PHONY定义非文件目标的本意是避免出现于目标同名的文件造成干扰如下例子中# cat Makefile .PHONY: aa: c @echo "a"b: c @echo "b"# touch c# make aa# make bb上面例子中,因为没有与目标同名的文件,所以没有干扰。make正常执行# touch b# make bmake: `b' is up to date.# touch a# make aa上面例子中:1、出现了与目标b同名的文件,且目标b比它所依赖的文件c还新,所以目标b的动作没有执行.2、出现 ...

论坛徽章:
0
2 [报告]
发表于 2012-03-01 17:33 |只看该作者
显然可以

使用.PHONY定义非文件目标的本意是避免出现于目标同名的文件造成干扰
如下例子中

# cat Makefile
.PHONY: a
a: c
        @echo "a"
b: c
        @echo "b"
# touch c
# make a
a
# make b
b

上面例子中,因为没有与目标同名的文件,所以没有干扰。
make正常执行

# touch b
# make b
make: `b' is up to date.
# touch a
# make a
a

上面例子中:
1、出现了与目标b同名的文件,且目标b比它所依赖的文件c还新,
所以目标b的动作没有执行.
2、出现了与目标a同名的文件,且目标a比它所依赖的文件c还新,
因为.PHONY制定了目标a不是文件,所以不会把目标a当成文件
和它的依赖文件c比较,目标a的动作正常执行。





您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP