Linux环境基础开发工具的使用(三)

news/2025/2/22 19:42:20/

五、Linux项目自动化构建工具-make/Makefile

make:是一条指令。

makefile:是一个当前目录下的文件。

image-20241216211116849

第一行:依赖关系。

第二行:依赖方法。

clean是空依赖关系。

image-20241216211022986

编译文件清理

image-20241216211216667

背景

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,

甚至于进行更复杂的功能操作。

makefile带来的好处就是——“自动化编译”,一旦写好,

只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,

一般来说,大多数的IDE都有这个命令,

比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

可见,makefile都成为了一种在工程方面的编译方法。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

理解

依赖关系、依赖方法

先找makefile文件,在makefile文件种找依赖关系和依赖方法,根据源文件帮我们形成对应的目标文件。

image-20250129203257669

mycode是依赖关系的目标文件

mycode依赖mycode.c这个源文件

gcc -o mycode mycode.c这个叫做依赖方法


image-20250129204801132

image-20250129205028949

makefile的自动化推导(栈式结构)

形成mycode就要先形成mycode.o

形成mycode.o就要先形成mycode.s

形成mycode.s就要先形成mycode.i

形成mycode.i就要先找到mycode.c

这个顺序与输入顺序无关。


是否能重新make

(在不修改源代码的基础上)为什么只能make一次

因为源文件没修改,形成的目标文件内容不需要(没有必要)再更新。提高编译效率。

image-20250129212957604

image-20250129212516341


修改源代码可以重新make

image-20250129213357580

修改前:

image-20250129213251255

修改后:

image-20250129213316943


怎么做到的?(怎么知道我当前的文件要不要被编译)

一定是源文件形成可执行文件的,先有源文件,再有可执行文件。

一般而言,源文件的修改时间 比 形成可执行文件的时间要 老。

如果我们修改了源文件,历史上还有可执行文件,那么源文件最近修改时间 比 可执行文件形成时间要 新。

how:

只需要比较可执行程序的最近修改时间 和 源文件的最近修改时间

.exe 新于 .c 源文件是老的,不需要重新编译。

image-20250129222056917

.exe 老于 .c 源文件是新的,需要重新编译。

image-20250129222123502

一般而言:.exe 形成时间 与 .c 最近修改时间 一般不会一样。

一般比较modify时间即可(对modify时间有疑问的同学,移步至“补充stat”)

结论:make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!(不一定总是执行)


如果想让对应的依赖关系总是执行呢?

.PHINY:伪目标 -> 总是被执行

image-20250129222640803

image-20250129222709349


如何清理

clean是空依赖关系

image-20250129211143941

image-20250129211239134


一般是让clean作为伪目标,总是被执行。

image-20250129222940087

image-20250129223040796


如果把clean放在最前面,则使用make命令默认执行第一行

image-20250129211623869

image-20250129211656511

所以不建议把清理放在最前面

make后面直接跟目标文件:指定名称 执行该目标文件的依赖关系与依赖方法

特殊符号

$@是目标文件 也就是冒号左边的

$^是源文件 也就是冒号右边的

image-20250203133315879

在编译的时候,$@、$^会回现出来

image-20250203133527037

如果不想让它回现出来,就在前面加上@

image-20250203134248743

image-20250203134335959


补充

stat

显示时间

文件=文件内容+文件属性

修改文件内容:

image-20250129213316943

image-20250129220408712

image-20250129220319540

修改文件属性:

image-20250129220704457

要把时间都修改成最近的时间

image-20250129221309088

修改access时间为最近时间

image-20250129221408404


六、使用git 命令行

git具有网络功能的版本控制器,是开源的,客户端和服务端是一体的。

安装 git
yum install git

已经下载好了是这样的

image-20250219212014695

git版本

image-20250219212116979

Github 创建项目

使用 Github 创建项目

注册账号

这个比较简单, 参考着官网提示即可. 需要进行邮箱校验.

创建项目

  1. 登陆成功后, 进入个人主页, 点击左下方的 New repository 按钮新建项目

  2. 然后跳转到的新页面中输入项目名称(注意, 名称不能重复, 系统会自动校验. 校验过程可能会花费几秒钟). 校验

完毕后, 点击下方的 Create repository 按钮确认创建.

  1. 在创建好的项目页面中复制项目的链接, 以备接下来进行下载.

下载项目到本地

创建好一个放置代码的目录.

这里的 url 就是刚刚建立好的 项目 的链接.

image-20250219212833532

image-20250219213201845

这个.git就是本地仓库

image-20250219213304786

git中的隐藏目录

image-20250219213446334

将代码克隆到了本地中,但是没有被仓库管理起来

image-20250219214049958

三板斧第一招: git add

将代码放到刚才下载好的目录中

git clone [url]

将需要用 git 管理的文件告知 git

三板斧第二招: git commit

提交改动到本地

最后的 "." 表示当前目录

提交的时候应该注明提交日志, 描述改动的详细内容.

三板斧第三招: git push

同步到远端服务器

需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了.

image-20250219222237377

image-20250219222256729

配置免密码提交

git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客

git add [文件名]

git commit .

git push

其他问题

git首次使用需要配置邮箱和用户名

image-20250219220601327

image-20250219220845054

why?

对代码进行溯源


要开源或者删除仓库 该怎么办?

image-20250219221413309

image-20250219221426078


.gitignore问题

在这里的后缀将不会上传至远端

image-20250219223854698

image-20250219224132342

image-20250219224950887

image-20250219225054080

最终只有.ppp的成功上传,同时,.gitignore也改变了

image-20250219225158413

查看提交记录


http://www.ppmy.cn/news/1574237.html

相关文章

05.Docker 容器命令

Docker 容器命令 Docker 容器命令1. 启动容器用法2. 显示当前存在容器3. 查看容器内的进程4. 查看容器资源使用情况5. 查看容器的详细信息6. 删除容器7. 容器的启动和停止8. 给正在运行的容器发信号9. 进入正在运行的容器10. 暴露所有容器端口11. 指定端口映射12. 查看容器的日…

Transformer解析——(四)Decoder

本系列已完结,全部文章地址为: Transformer解析——(一)概述-CSDN博客 Transformer解析——(二)Attention注意力机制-CSDN博客 Transformer解析——(三)Encoder-CSDN博客 Transforme…

Linux 内核网络设备驱动编程:私有协议支持

一、struct net_device的通用性与私有协议的使用 struct net_device是Linux内核中用于描述网络设备的核心数据结构,它不仅限于TCP/IP协议,还可以用于支持各种类型的网络协议,包括私有协议。其原因如下: 协议无关性:struct net_device的设计是通用的,它本身并不依赖于任何…

【进阶】Java设计模式详解

java注解 什么是注解? java中注解(Annotation),又称java标注,是一种特殊的注释。 可以添加在包,类,成员变量,方法,参数等内容上面,注解会随同代码被编译到字节码文件中&#xff0…

《重构-》

一、代码坏的味道 神秘命名 ​​​​​代码应该直观明了。要深思熟虑如何给函数、模块、变量和类命名,使它们能清晰地表明 自己的功能和用法。 重复代码 一旦有重复代码存在,阅读这些重复的代码时你就必须加倍仔细,留意其间细微的差异。如果…

EasyExcel 自定义头信息导出

需求:需要在导出 excel时,合并单元格自定义头信息(动态生成),然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…

TikTok账户安全指南:如何取消两步验证?

TikTok账户安全指南:如何取消两步验证? 在这个数字化的时代,保护我们的在线账户安全变得尤为重要。TikTok,作为全球流行的社交媒体平台,其账户安全更是不容忽视。两步验证作为一种增强账户安全性的措施,虽…

高斯积分的证明

内容来源 B站视频BV1LC4y1P7gM 高斯积分 ∫ 0 ∞ e − x 2 d x \int^\infty_0e^{-x^2}\mathcal{d}x ∫0∞​e−x2dx 添加新元 设 f ( t ) [ ∫ 0 t e − x 2 d x ] 2 f(t)\left[\int^t_0e^{-x^2}\mathcal{d}x\right]^2 f(t)[∫0t​e−x2dx]2 现目标 求 lim ⁡ t → ∞ f …