Linux基础环境开发工具的使用(二):动静态库的理解,make,makefile(下)

简介: Linux基础环境开发工具的使用(二):动静态库的理解,make,makefile

二.make,makefile

make/makefile是Linux项目自动化构建工具

其中make是一个命令,makefile是一个文件(这个文件当中所写的是依赖关系和依赖方法)

1.功能

既然这个make,makefile这么强大,那就让我们来一起探索一下吧

2.基本语法

1.快速使用

首先我们带大家快速使用一下makefile

我们先创建一个test.c

然后写了一个简单的hello world

然后我们touch一个Makefile

然后用vim写了两行

2.依赖关系和依赖方法

3.补充:编译的特性

但是现在有这么一种情况,再生成刚才的可执行程序之后,我再次make,make,make

也就是说它现在就不给我再去编译了

然后我修改一下这个test.c文件

我随便加上了几行hello world

然后我再去make一下

也就是说:

如果我没有改动源文件

那么make一次之后的每次make时都不会再去重新编译

4.补充:ACM时间

我们使用stat查看一下这个test.c的时间

它上面给我显示了三种时间:

Access : 文件的"最近"访问时间

Modify: 文件的内容的最近修改时间

Change: 文件的属性的最近修改时间

其中文件的属性包括:文件名,文件类型,文件权限(rwx,拥有者,所属组,Other,大小,等等等等)

你这个Modify好理解,Change也挺好理解,你这个Access的"最近"为什么要加双引号呢?

还有我这个比较到底是要比较那个时间呢?

我们先来探索一下第二个问题

1.具体比较的时间

首先我们先明确一点:

我们修改一个文件的内容是会影响到它的大小的,绝大多数情况下是会改变这个文件的大小的,无论是这个文件最后变大还是最后变小了

大小不变的概率很低

因此绝大多数情况下:改变这个文件的Modify时间时,这个Change时间也会随之变动

那么我们就用一下排除法吧:

我们先只去改变这个文件的Change时间和Access时间,然后看看这个文件会不会重新编译

首先我们先通过权限来改变Change时间

然后我们通过cat修改文件的Access时间

然后我们修改了一下这个文件的Modify时间

经过排除法,我们验证了只有修改Modify时间后,这个文件才会重新编译,其实我们想一下也完全可以理解,这里只是验证了一下

2.Access时间的特点

5.clean

然后我们回到make和makefile中,你这个make和makefile的确是能够让我进行快速便捷地编译形成可执行程序

但是如果我今天想要把我的这个可执行程序删除,你make和makefile能搞定吗?

当然可以啦

这就要用到clean了

然后我们make clean

然后我们make

发现clean的清理工作很成功

所以以后当我们想要

1.编译这个源代码生成可执行程序,只需要make

2.删除这个可执行程序,只需要make clean

那么如果我把clean放到前面会怎么样呢?

6.makefile扫描特性

怎么明明当我还没有mycmd这个可执行程序的时候

这个rm -f mycmd就能执行呢?

这里有一个小的知识点:

其实是因为我们加了-f选项

也就是说rm -f是不管你有没有mycmd这个文件我都会执行

如果你有,那么我强制删除,如果你没有,那我我执行了也相当于我什么都不执行

回到正题,为什么我现在make的时候不去给我编译源文件,反而给我删除可执行程序呢?

这就要说到makefile的扫描特性了:

那我现在就是想要编译源文件生成可执行程序,怎么办?

我们可以make mycmd来进行编译(其中这个mycmd就是我们想要生成的可执行程序的名字)

而这个clean也是我们自己起的名字,不过最好还是让他叫做clean就行

下面我们来验证一下:

我新建了一个目录test

这里我给这个想要生成的可执行程序随便起了一个名字wz

可见make,make clean成功运行

下面我把clean改了

总之:

我们再写makefile的时候,一般都是这样的:

1.clean放在后面,编译生成可执行程序放在前面

2.clean就让他叫做clean

3.想要编译就用make命令,想要清理可执行程序就用make clean命令

3.makefile语法补充

1…PHONY关键字

对于这个关键字:记住一点:总是被执行

怎么理解呢?

我们先用.PHONY来修饰一下我们这个可执行程序的编译

注意:在makefile中:注释使用#表示的

然后我们发现:

2.@ @  ^

下面一些makefile的拓展写法

这个@和@和^是可以自动去推导的,类似于C++中的auto是可以自动推导类型的(我们可以这么理解,但是这两种语法完全扯不上边)

我们就可以理解为这是一种固定写法,没有为什么

然后我们make一下测试测试

发现的确成功运行了

3.变量

下面也是makefile的一种拓展写法

测试一下,发现正常运行

4.make和makefile语法理解(递归)

下面我们在这个依赖关系和依赖方法的上面来深层次的去理解一下make和makefile的执行逻辑

编写这个makefile,我们也可以这样去写

4.多文件的makefile的书写

你前面跟我提的makefile都是单文件的

那么多文件的情况呢?

下面我们写了fun.h fun.c test.c

成功运行

当然这里把.c改成.o,然后再去生成.o目标文件也是可以的

以上就是我们Linux基础环境开发工具的使用(二):动静态库的理解,make,makefile的全部内容,希望能对大家有所帮助!

相关文章
|
15天前
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
48 20
[Linux工具] Makefile
|
2月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
318 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
2月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
3月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
93 4
|
安全 Linux 测试技术
配置Goby工具环境(win,linux,macOS)
配置Goby工具环境(win,linux,macOS)
879 2
|
3月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
301 8
|
3月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1059 6
|
10天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
24 11