当前位置:网站首页>11.书写规则-伪目标
11.书写规则-伪目标
2022-07-29 02:18:00 【其木王·王子】
1. PHONY
执行:
make [目标]
若没有目标,默认第一个目标。
.PHONY : clean
clean:
rm *.o temp
像我们前面例子中的“clean”一样,即然我们生成了许多文件编译文件,我们也应该提供一个清除它们的“目标”以备完整地重编译而用。 (以“make clean”来使用该目标)
因为,我们并不生成“clean”这个文件。“伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以 make 无法生成它的依赖关系和决定它是否要执行。我们只有通过显示地指明这个“目标”才能让其生效。然,“伪目标”的取名不能和文件名重名,不然其就失去了“伪目标”的意义了。
当然,为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向 make 说明,不管是否有这个文件,这个目标就是“伪目标”。
.PHONY : clean
只要有这个声明,不管是否有“clean”文件,要运行“clean”这个目标,只有“makeclean”这样。于是整个过程可以这样写:
.PHONY: clean
clean:
rm *.o temp
2. 为伪目标指定所依赖的文件
伪目标一般没有依赖的文件。但是,我们也可以为伪目标指定所依赖的文件。伪目标同样可以作为“默认目标”,只要将其放在第一个。一个示例就是,如果你的 Makefile 需要一口气生成若干个可执行文件,但你只想简单地敲一个 make 完事,并且,所有的目标文件都写在一个 Makefile 中,那么你可以使用“伪目标”这个特性:
.PHONY : all
all : prog1 prog2 prog3
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
我们知道,Makefile 中的第一个目标会被作为其默认目标。我们声明了一个“all”的伪目标,其依赖于其它三个目标。由于伪目标的特性是,总是被执行的,所以其依赖的那三个目标就总是不如“all”这个目标新。所以,其它三个目标的规则总是会被决议。也就达到了我们一口气生成多个目标的目的。“.PHONY : all”声明了“all”这个目为“伪目标”。
3. 让伪目标成为依赖
从上面的例子我们可以看出,目标也可以成为依赖。所以,伪目标同样也可成为依赖。看下面的例子:
.PHONY: cleanall cleanobj cleandiff
cleanall : cleanobj cleandiff
rm program
cleanobj :
rm *.o
cleandiff :
rm *.diff
“make clean”将清除所有要被清除的文件。“cleanobj”和“cleandiff”这两个伪目标有点像“子程序”的意思。我们可以输入“make cleanall”和“make cleanobj”和“make cleandiff”命令来达到清除不同种类文件的目的。
边栏推荐
- etcd实现大规模服务治理应用实战
- 区区区间---线段树lazy标记板子题
- IOT components
- CUDA details GPU architecture
- A good-looking IAPP donation list source code
- golang 协程的实现原理
- Kbxxxxx is not necessarily a patch, but also a description of a solution to a problem
- Polygon zkevm - Introduction to HERMEZ 2.0
- Only when you are far away will you miss
- Code implementation - the greatest common factor of polynomials (linear algebra)
猜你喜欢

家庭亲戚关系计算器微信小程序源码
![[quality] code quality evaluation standard](/img/33/2c2256fd98b908ddaf5573f644ad7f.png)
[quality] code quality evaluation standard

Understand the evolution of redis architecture in one article

HTTP cache

laravel框架中实现封装公共方法全局调用

Library management system

Teach you how to install vscode by hand (with illustrated steps)

How to migrate thinkphp5 projects to Alibaba cloud function computing to cope with traffic peaks?

Source code of Jiugongge heart puzzle Applet / source code of main wechat applet with traffic

九宫格心形拼图小程序源码/带流量主微信小程序源码
随机推荐
Asemi rectifier bridge s25vb100, s25vb100 parameters, s25vb100 application
Driverless obstacle avoidance technology
QT屏幕自适应自动布局,拖动窗口自动变大变小(一)
[error reporting] node:internal/modules/cjs/loader:936 [solution]
nacos名字的由来
云开发口袋工具箱微信小程序源码
time_wait和close_wait产生原因
XSS range (II) xss.haozi
Redis队列实现秒杀
Ten methods to prevent blackmail software from attacking data
新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题开源全解密版
Flink内核源码(七)Flink SQL提交流程
2022/07/28 learning notes (day18) common APIs
工程经济学简答题
QT qstringlist usage
第十天笔记
etcd实现大规模服务治理应用实战
图书管理系统
白马过隙的时光
PHP幸运抽奖系统带后台源码