make中的伪目标

zjs_worm 2009-04-03 10:24:04
之前一直被make中的伪目标搞得很混乱,找了make的Manual看了后终于理清了点头绪,说下我的理解,有错的地方还望各位大大多多指正。
在makefile中,某一个目标的命令可能被执行需要以下两个前提(之一):
1 该目标是makefil中的第一个目标,也即是所谓的“默认目标”(default goal);
2 该目标是另外某一个目标的prerequisite(必要条件?汗!这个不知翻译成什么好……)

在满足这两个前提中的某一个之后,才去检查那些目标是否存在、prerequisite是否比target更新这些状况,从而最终确定该目标的命令是否要被执行。
而对于伪目标clean,因为它不是default goal,也不会是另外某一个目标的必要条件(prerequisite)(有一种情况除外,就是当需要在不同情况clean不同文件时,可以设一个clean all 的伪目标,clean all的prerequisites 是具体的clean obj1、clean obj2 等伪目标。这种情况下前面提到的clean也就大概相当于这里的clean all),所以除非我们明确的输入make clean 让clean的命令执行,单是make的话clean将不会被执行。
在《跟我一起写makefile》中有一句话“伪目标的特性是:总是被执行的. ”,这个事实上也是要在满足了前面说到的两个前提(之一)的情况下才是的。
而关于伪目标被用做prerequisite和伪目标做default goal的情况,涉及到的就更多了,这里也就不说了。
...全文
155 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhhlsanyu 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daviddb7 的回复:]
很简单,目标是生成文件,且此文件有依赖关系,不一定每次都执行。
伪目标不一定要生成文件,没有依赖关系,所以一定会执行。
[/Quote]
一定会执行?那“make clean"有什么用,应该是满足LZ所说两个前提之一才是“一定会执行”吧?
daviddb7 2009-04-10
  • 打赏
  • 举报
回复
很简单,目标是生成文件,且此文件有依赖关系,不一定每次都执行。
伪目标不一定要生成文件,没有依赖关系,所以一定会执行。
mosaic 2009-04-03
  • 打赏
  • 举报
回复
prerequisite,前置条件,必要条件,好像都可以吧
mosaic 2009-04-03
  • 打赏
  • 举报
回复
prerequisite,前置条件,必要条件,好像都可以吧

3,286

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 实用资料发布区
社区管理员
  • 实用资料发布区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧