什么是网站?,app运营流程,软文发布公司,最新国际军事动态和军事战争只有不停的努力#xff0c;才能看起来很轻松#xff01;#xff01;#xff01;加qq1126137994共同学习探讨更多技术#xff01;#xff01;#xff01;
1、思考#xff1a;
makefile中的目标究竟是什么#xff1f;
在默认的情况下#xff1a;
make认为目标对应一…只有不停的努力才能看起来很轻松加qq1126137994共同学习探讨更多技术
1、思考
makefile中的目标究竟是什么
在默认的情况下
make认为目标对应一个文件make比较目标文件和依赖文件之间的新旧关系决定是否执行相应命令make以文件处理作为第一优先级
但是当我们的目标不是一个文件语法上要有什么变化呢 例如下图 当执行make clean 时我们是希望执行rm *.o hello.out的命令的。、
如果文件中没有命名为clean的上述执行可以正常进行但是如果当文件中存在文件名为clean时我们执行make clean命令make程序就会把clean当成是那个文件来处理而不会按上述所说的执行
解决办法 引入伪目标
通过.PHONY关键字声明伪目标伪目标不对应任何实际的文件伪目标的命令总是执行不管伪目标的依赖是否有更新都要总是执行
伪目标的语法先声明后使用 本质伪目标是make程序中特殊目标.PHONY的依赖
.PHONY:clean
##注释##
clean:rm *.o hello.out
下面给出一个例子来看看伪目标的使用所依赖的文件func.c与main.c是上一篇文章里的点击链接查看点击查看 hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.c.PHONY : cleanclean:rm *.o hello.out输入make的运行结果为
输入make clean的运行结果为
2、伪目标的妙用函数调用
伪目标的调用规则调用函数调用
hello.out : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.c.PHONY : rebuild clean all ##原理当一个目标的依赖包含伪目标时伪目标所定义的命令总是被执行rebuild : clean all ##模拟函数的调用all : hello.outclean :rm *.o hello.out
注意如果我们使用的是GNU的make用.PHONY声明伪目标没有任何问题但是如果我们不是用的GNU的make有可能其他的make程序不支持,PHONY声明伪目标这个时候我们就需要避开.PHONY用其他方法声明伪目标 可以像如下图一样定义伪目标clean
原理如果一个目标没有命令或者依赖并且它不是一个已经存在的文件名在执行此规则时目标总会认为是最新的 例子 hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.cclean:Forcerm *.o hello.outForce:运行结果与上述的运行结果一致
3、总结
默认情况下make认为目标对应着一个文件.PHONY用于声明一个伪目标伪目标不对应实际的文件伪目标的本质是make中特殊目标.PHONY的依赖使用伪目标可以模拟“函数调用”
想一起探讨以及获得各种学习资源加我有我博客中写的代码的原稿 qq1126137994 微信liu1126137994 可以共同交流关于嵌入式操作系统C语言C语言数据结构等技术问题。
本学习记录完全来源于狄泰软件学院的相关课程可以加我q1126137994或者Q群199546072 给你推荐更多学习课程。