Makefile基础教程(伪目标)
  micz61TEX78l 2023年11月02日 37 0

(文章目录)


前言

本篇文章将讲解Makefile中的伪目标,Makefile的目标在前面的文章中我们已经讲解了那么这篇文章我们就来讲讲伪目标。

一、伪目标概念

Makefile 伪目标是一类特殊的目标,它们的目的是提供给 make 工具一些命令,而不是用来构建文件的。因为伪目标通常不会对应实际的文件,所以它们的目的也不是为了构建文件,而是执行一些特定的操作,如清理编译过的目标文件、运行测试等。

Makefile 伪目标的名字通常没有实际的文件名或者函数名那么有意义,通常以 .PHONY 为名,表示该目标是伪目标,不对应实际的文件。

例如,下面的 Makefile 文件定义了一个伪目标 clean,用于清理生成的目标文件:

hello all : hello.o func.o
	gcc -o hello hello.o func.o

hello.o : hello.c
	gcc -c -o hello.o hello.c

func.o : func.c
	gcc -c -o func.o func.c

.PHONY: clean

clean :
	rm *.o hello

首先我们执行make命令: 执行完make命令后能够查看到生成的.o文件和hello可执行文件: 在这里插入图片描述 然后我们执行make clean命令: 再次查看文件: 可以发现这些生成的.o和可执行文件都被移除了。 在这里插入图片描述 所以伪目标的作用就是可以帮助我们去执行一些特定的命令。

二、进一步了解伪目标

我们对上面这个makefile进行一些改进:

hello : hello.o func.o
	gcc -o hello hello.o func.o

hello.o : hello.c
	gcc -c -o hello.o hello.c

func.o : func.c
	gcc -c -o func.o func.c

.PHONY: clean rebuild all

rebuild : clean all

all : hello

clean :
	rm *.o hello

这里新添加了rebuild 和 all伪目标

那么我们就能够使用make rebuild 和make all这两个命令来执行makefile了

执行结果:

make rebuild就是帮助我们先清除生成的文件然后再重新生成这些文件。 在这里插入图片描述 为什么执行了make rebuild 就可以达到这样的效果呢?

当我们在命令行中输入 make rebuild 后,make 工具会先执行 clean 目标中定义的删除操作,然后再执行 all 目标中定义的编译操作,这相当于先清空所有目标文件,再完成新一轮的编译操作。

all 和 clean 作为伪目标,不对应实际的文件或者函数,所以它们不会触发实际的编译过程,而是只执行它所规定的命令。

三、不使用.PHONY来定义伪目标

前面我们都是使用的.PHONY来定义一个伪目标的,在这里也可以不使用.PHONY来定义伪目标。

在clean后面加一个FORCE依赖。 这个FORCE依赖在后面也作为一个目录使用,当一个目标没有命令或者依赖并且他也不是一个文件名时认为这个目标永远都是最新的。所以无论目录下是否存在clean文件执行make clean都可以达到我们想要的效果。

hello all : hello.o
	gcc -o hello hello.c

clean : FORCE
	rm *.o

FORCE : 

总结

本篇文章主要给大家讲解了什么是伪目标,希望大家好好总结。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  micz61TEX78l   2023年11月19日   29   0   0 3c插入图片寄存器
micz61TEX78l