首页 > 其他 > 详细

makefile实验三 理解make工作的基本原则

时间:2019-08-07 17:59:28      阅读:92      评论:0      收藏:0      [点我收藏+]

 

代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的。

一,当前的makefile代码

root@ubuntu:~/Makefile_Test# 
root@ubuntu:~/Makefile_Test# 
root@ubuntu:~/Makefile_Test# cat My_Make 

Target := Hello.out

$(Target) :
    @echo "Target"


test.out : $(Target)
    @echo "test.out"

二,当前的ubuntu环境 

root@ubuntu:~/Makefile_Test# ls
3.Makefile_PHONY_test2  func.c  Hello.out  Makefile_another_way_of_PHONY  Make-f_YOUR_OWN_Makefile.txt  tmp.c
clean                   func.h  main.c     Makefile_PHONY_clean           My_Make

ps: 这里存在一个Hello.out文件

 

三,现在一步步(按本博客各个步骤的先后顺序理解)执行makefile,你可以在脑子里预期每一步的执行效果,我也会附上解析

root@ubuntu:~/Makefile_Test# 
root@ubuntu:~/Makefile_Test# make -f My_Make Hello.out 
make: Hello.out is up to date.
root@ubuntu:~/Makefile_Test# make -f My_Make test.out
test.out

解析:当前本地存在Hello.out   , 所以make Hello.out 得到 make: ‘Hello.out‘ is up to date.  这一结果是合理的。 若不懂,看我前面的博客。

          当前本地不存在test.out, 所以尝试make test.out有效,即会执行目标test.out所在规则内的命令(全部命令,一条或多条)。

 

接着操作:

root@ubuntu:~/Makefile_Test# echo "\"I am test.out\"" > test.out
root@ubuntu:~/Makefile_Test# cat test.out 
"I am test.out"
root@ubuntu:~/Makefile_Test# make -f My_Make test.out
make: test.out is up to date.

在命令行内,先创建了一个本地的test.out, 那么此时,本地存在Hello.out和test.out, make test.out无效(即不会执行目标test.out所在规则内的命令)

 

接着来:

root@ubuntu:~/Makefile_Test# rm Hello.out 
root@ubuntu:~/Makefile_Test# make -f My_Make test.out
Target
test.out

在命令行内,先删除Hello.out,

   回看源代码:

Target := Hello.out

$(Target) :
    @echo "Target"
此时本地不存在Hello.out,目标Target相当于永远不是最新的目标。

那么此时去make test.out,首先一定会打印出:Target

再次回看源代码:

test.out : $(Target)
    @echo "test.out"
test.out依赖于Target。也就是说test.out依赖于一个永远不是最新的目标,自然,test.out就变成了一个永远不是最新的目标,即被make,总是会生效。

于是最终又打印了出了
test.out

这里要注意哦:虽然本地存在了test.out,但是鉴于上述的原因: 即当前make软件认为test.out比Target目标旧,所以make test.out是有效的。
因为make软件要力争:目标比依赖更新。

   这里再来小结下make软件的工作原理:

        1,目标文件不存在,make软件会将本次make该目标的操作生效(即会执行规则内的命令)。

                             2,目标文件存在,但是比依赖的文件旧,make软件也会将本次make该目标的操作生效(即会执行规则内的命令)。

 

makefile实验三 理解make工作的基本原则

原文:https://www.cnblogs.com/happybirthdaytoyou/p/11316782.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!