当前位置: 首页 > news >正文

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

五、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

查看提交记录

相关文章:

  • 用算术右移操作实现整型数的除法
  • 【git】工作流实战:从本地仓库到远程仓库,git pull 与git rebase使用讲解,案例解析
  • C++,设计模式,【工厂方法模式】
  • Openssl之SM2加解密命令
  • 【个人记录】openEuler安装K3S并配置为GPU节点
  • python高效使用06_while_True和while_1哪个效率更高
  • OpenCV形态学操作
  • Windows 10事件查看器
  • PINN求解一维burgers方程
  • 【AB-01】 AUTOSAR Builder软件安装
  • C++:从拷贝构造函数到深浅拷贝
  • 如何修改Windows系统Ollama模型存储位置
  • 第三章 组件(7)- 布局与Sections
  • Java——面向对象编程
  • 使用多态来替换条件语句
  • 【嵌入式Linux应用开发基础】进程间通信(3):共享内存
  • 遗传算法与深度学习实战系列,自动调优深度神经网络和机器学习的超参数
  • 完美转发使用
  • 现代任务调度系统架构深度解析——以TaskSchedulerController为核心的弹性任务管理方案
  • Spring AI集成Ollama调用本地大模型DeepSeek
  • 抖音运营/seo快速优化方法
  • 温岭做网站公司/济南市最新消息
  • 都有哪些js素材网站/培训师资格证怎么考
  • 国外打开国内网站慢/优化大师好用吗
  • 烟台网站建设咨询/百度网址查询
  • 大型网站建设费用/百度竞价排名事件