文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Makefile入门(3)

2023-01-31 07:18

关注
版权所有,转载请注明:本文出自学与思linux编程网
接着Makefile入门(2)继续来学习Makefile
在前面的例子中,Makefile中的每个目标体都是一个文件,但事实上我们在看别人写得比较正规的Makefile时,我们会发现有些目标体并不是文件,比如常见的clean和install目标体,如下面这个真实的Makefile片断:

install:
    cp sunrise /usr/bin/
clean:
    rm *.o sunrise

这种在Makefile中不是文件的目标体我们称之为伪目标,它仅仅起到标签的作用。如这里clean和 install这两个目标体都是伪目标,有了它们我们就可以在命令行输入make install来把sunrise这个程序安装到/usr/bin/目录中,或者输入make clean来清除以前编译好的目标文件和可执行程序以完整的重新编译整个程序。
那如果make程序正在处理的目录中正好有一个叫install的文件,我们输入make install会发生什么事情呢?回忆前一篇文章我们学习的make工作流程可知:
因为clean这个目标对应的规则中没有依赖体,所以make会认为install文件是最新的,于是就不会去执行该条规则对应的 cp sunrise /usr/bin/ 这条命令了,我们的安装也就没有真正完成。
为了避免上述情况,我们可以用 .PHONY 这个伪目标关键字来显示指明某个目标是伪目标,如:

  .
  .
  .
.PHONY : install clean
install:
    cp sunrise /usr/bin/
clean:
    rm *.o sunrise

有了这样显示的说明,当我们输入make install时,不管make正在处理的目录是否包含一个叫install的文件,make程序总是会去执行这条规则所对应的命令 cp sunrise /usr/bin/ ,对clean这个目标的处理也类似。
前面我们看到的install和clean这两个伪目标都没有依赖体,那是不是伪目标不能有依赖体呢?其实不是,伪目标也可以有依赖体,如:

.PHONY : all
all: sunrise
  .
  .
  .

这样我们就可以输入make all(如果all对应的规则是整个Makefile的第一条规则,我们只需简单的输入make就行了)来编译这个sunrise了。
对Makefile的伪目标总结一下:除非显示的用.PHONY对一个目标体作说明外,make在处理普通目标体(目标体是文件)和伪目标(目标体 不是文件)时流程都一样,决定是否执行该目标对应规则的命令的依据也一样,但对于用.PHONY显示指明的伪目标,make程序则不会管这个目标体所对应 的依赖体的时间只会去分析这些依赖体是否已经准备好(如果有依赖体),然后就去执行该规则的命令(如果有命令部分)。
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯