首页 > 其他分享 >Makefile基础教程(伪目标)

Makefile基础教程(伪目标)

时间:2023-06-11 19:03:59浏览次数:39  
标签:文件 func make Makefile 目标 clean 基础教程 hello

(文章目录)


前言

本篇文章将讲解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 : 

总结

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

标签:文件,func,make,Makefile,目标,clean,基础教程,hello
From: https://blog.51cto.com/u_16153875/6458547

相关文章

  • Makefile教程(Makefile的结构)
    (文章目录)前言一、Makefile的结构Makefile通常由一系列规则组成,每条规则定义了如何从源文件生成目标文件。每个规则又由目标、依赖和命令三部分组成。下面是Makefile规则的基本结构:target:dependenciescommand1command2...其中,target是要生成的目标文......
  • Makefile教程(入门介绍)
    (文章目录)前言本篇文章将带大家学习Makefile,Makefile在文件的编译中起到重要作用,在Linux中我们也是经常使用到Makefile,下面我将会带大家学习什么是Makefile。一、Makefile介绍Makefile是用于自动化构建程序的一种工具,它通常被用于编译,连接以及打包程序等任务。Makefile利用了......
  • Makefile基础教程(变量的高级主题,变量的拓展)
    (文章目录)前言本篇文章将给大家讲解一下变量的高级主题,变量的拓展,这些主题可以让你更加灵活地编写和维护Makefile。一、变量值的替换1.简单替换变量替换语法格式:$(var:a=b)其中,a可以是一个字母,表示var中每个单词结尾的这个字母。b则是替换的字符串。它会替换每个单......
  • 前端vue地图定位并测算当前定位离目标位置距离可用于签到打卡
    前端vue地图定位并测算当前定位离目标位置距离可用于签到打卡, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id=12974效果图如下:   #####使用方法```使用方法<!--//腾讯地图key注册地址(针对H5端,manifest.json中web配置,配置定......
  • 证明逻辑回归的目标函数是凸函数
    证明逻辑回归的目标函数是凸函数假设有训练数据,其中为每一个样本,而且是样本的特征并且,代表样本数据的标签(label),取值为或者.在逻辑回归中,模型的参数为。对于向量,我们一般用粗体来表达。为了后续推导的方便,可以把b融入到参数w中。这是参数就变成,也就是前面多出了一个项,......
  • es索引数据复制并增加条件和修改目标数据值
    es操作同一个索引里数据的复制语法复制数据: POST_reindex{"source":{"index":"source_index"},"dest":{"index":"destination_index"}} 字段值修改:POSTsource_index/_update_by_query{&quo......
  • win10系统下将yolo v2-tiny模型部署于Maix dock开发板进行目标检测
    (1)制作目标检测数据集使用labelimg软件进行图片的标注如图所示举一个例子:点击open,导入等待标注的图片,进行目标的标注后生成标注从config文件,数据分为train_img文件夹与train_ano文件,图片与标注的信息文件。一般每一个class至少要有40张以上图片数据。(2)建立训练模型模型的选择有......
  • 雷达课堂 (第4讲) 雷达目标检测原理(3)
    本文编辑:@调皮连续波,保持关注调皮哥,获得更多雷达学习资料和建议!一、引言感谢大家前来捧场,我是调皮哥,我希望自己能够坚持把【雷达课堂】这个专题做得更加完美,让点进来的读者,一定要带着收获出去,不然就是纯属浪费大家的宝贵时间。今天是【雷达课堂】的第4讲,雷达目标检测原理(3)小节。上......
  • Makefile基础教程(自动生成依赖关系)
    @TOC前言在前面的文章中我们都只使用到了.c文件作为依赖但是在实际的工程中肯定是不可能只有.c文件的还存在.h文件,那么在包含了.h文件后又该如何来包含依赖关系呢?一、makefile不包含.h依赖的后果首先先在目录下新建四个文件夹,其中就包含了fun.h这个文件。makefile:OBJS:=fun.omai......
  • 【解决问题】libevent 编译时报错 Makefile:1708: test/.deps/test_regress-tinytest.
    1开发环境linux版本:统信UOS1030(可以认为是特殊的ubuntu)开发语言:C++2报错现象截图:报错语句:make:进入目录“/home/depend/libevent-2.1.11-stable”Makefile:1708:test/.deps/test_regress-tinytest.Po:没有那个文件或目录make:***没有规则可制作目标“te......