Linux环境基础开发工具的使用(三)
五、Linux项目自动化构建工具-make/Makefile
make:是一条指令。
makefile:是一个当前目录下的文件。

第一行:依赖关系。
第二行:依赖方法。
clean是空依赖关系。

编译文件清理

背景
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,
makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,
甚至于进行更复杂的功能操作。
makefile带来的好处就是——“自动化编译”,一旦写好,
只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,
一般来说,大多数的IDE都有这个命令,
比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。
可见,makefile都成为了一种在工程方面的编译方法。
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
理解
依赖关系、依赖方法
先找makefile文件,在makefile文件种找依赖关系和依赖方法,根据源文件帮我们形成对应的目标文件。

mycode是依赖关系的目标文件
mycode依赖mycode.c这个源文件
gcc -o mycode mycode.c这个叫做依赖方法


makefile的自动化推导(栈式结构)
形成mycode就要先形成mycode.o
形成mycode.o就要先形成mycode.s
形成mycode.s就要先形成mycode.i
形成mycode.i就要先找到mycode.c
这个顺序与输入顺序无关。
是否能重新make
(在不修改源代码的基础上)为什么只能make一次
因为源文件没修改,形成的目标文件内容不需要(没有必要)再更新。提高编译效率。


修改源代码可以重新make

修改前:

修改后:

怎么做到的?(怎么知道我当前的文件要不要被编译)
一定是源文件形成可执行文件的,先有源文件,再有可执行文件。
一般而言,源文件的修改时间 比 形成可执行文件的时间要 老。
如果我们修改了源文件,历史上还有可执行文件,那么源文件最近修改时间 比 可执行文件形成时间要 新。
how:
只需要比较可执行程序的最近修改时间 和 源文件的最近修改时间
.exe 新于 .c 源文件是老的,不需要重新编译。

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

一般而言:.exe 形成时间 与 .c 最近修改时间 一般不会一样。
一般比较modify时间即可(对modify时间有疑问的同学,移步至“补充stat”)
结论:make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!(不一定总是执行)
如果想让对应的依赖关系总是执行呢?
.PHINY:伪目标 -> 总是被执行


如何清理
clean是空依赖关系


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


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


所以不建议把清理放在最前面
make后面直接跟目标文件:指定名称 执行该目标文件的依赖关系与依赖方法
特殊符号
$@是目标文件 也就是冒号左边的
$^是源文件 也就是冒号右边的

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

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


补充
stat
显示时间
文件=文件内容+文件属性

修改文件内容:



修改文件属性:

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

修改access时间为最近时间

六、使用git 命令行
git具有网络功能的版本控制器,是开源的,客户端和服务端是一体的。
安装 git
yum install git
已经下载好了是这样的

git版本
![]()
在 Github 创建项目
使用 Github 创建项目
注册账号
这个比较简单, 参考着官网提示即可. 需要进行邮箱校验.
创建项目
-
登陆成功后, 进入个人主页, 点击左下方的 New repository 按钮新建项目
-
然后跳转到的新页面中输入项目名称(注意, 名称不能重复, 系统会自动校验. 校验过程可能会花费几秒钟). 校验
完毕后, 点击下方的 Create repository 按钮确认创建.
-
在创建好的项目页面中复制项目的链接, 以备接下来进行下载.
下载项目到本地
创建好一个放置代码的目录.
这里的 url 就是刚刚建立好的 项目 的链接.


这个.git就是本地仓库

git中的隐藏目录

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

三板斧第一招: git add
将代码放到刚才下载好的目录中
git clone [url]
将需要用 git 管理的文件告知 git
三板斧第二招: git commit
提交改动到本地
最后的 "." 表示当前目录
提交的时候应该注明提交日志, 描述改动的详细内容.
三板斧第三招: git push
同步到远端服务器上
需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了.


配置免密码提交
git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客
git add [文件名]
git commit .
git push
其他问题
git首次使用需要配置邮箱和用户名

![]()
why?
对代码进行溯源
要开源或者删除仓库 该怎么办?


.gitignore问题
在这里的后缀将不会上传至远端




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

查看提交记录

相关文章:
Linux环境基础开发工具的使用(三)
五、Linux项目自动化构建工具-make/Makefile make:是一条指令。 makefile:是一个当前目录下的文件。 第一行:依赖关系。 第二行:依赖方法。 clean是空依赖关系。 编译文件清理 背景 会不会写makefile,从一个侧面说…...
vue中将el-table导出为excel文件
在 Vue Element UI 中,el-table 数据导出 Excel 文件,可以使用 xlsx(SheetJS)库进行处理。以下是详细的实现方法,包括安装依赖、代码示例和优化建议。 1. 安装依赖 首先,安装 xlsx 库: 复制…...
electron提升软件运行权限,以管理员权限运行
大家有任何想法,都可以联系博主沟通。 本系列为实战文章,最终实现的桌面工具软件,获取方式:百度网盘地址:https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…...
力扣LeetCode: 2506 统计相似字符串对的数目
题目: 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成,则认为这两个字符串 相似 。 例如,"abca" 和 "cba" 相似,因为它们都由字符 a、b、c 组成。然而,"aba…...
安科瑞能源物联网平台助力企业实现绿色低碳转型
安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进,能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台(EMS 3.0),正是这一趋势下的创新解决方案。该平台集成了物联网&…...
Spring Boot 中使用 @Transactional 注解配置事务管理
事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…...
动态链接器(九):.init和.init_array
ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分,用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码,通常由运行时环境(如C标准库的启动例程࿰…...
标准I/O与文件I/O
一、概念 标准IO:标准IO是指程序与标准输入(stdin)、标准输出(stdout)和标准错误(stderr)之间的输入输出操作。通常用于与用户交互或输出调试信息。文件IO:文件IO是指程序与文件系统…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter20-JavaScript API
二十、JavaScript API JavaScript API 随着 Web 浏览器能力的增加,其复杂性也在迅速增加。从很多方面看,现代 Web 浏览器已经成为构建于诸多规范之上、集不同 API 于一身的“瑞士军刀”。浏览器规范的生态在某种程度上是混乱而无序的。一些规范如 HTML5&…...
C#初级教程(7)——初级期末检测
练习 1:计算圆的周长和面积 改编题目:编写一个 C# 程序,让用户输入圆的半径,然后计算并输出该圆的周长和面积,结果保留两位小数。 using System;class CircleCalculation {static void Main(){const double pi 3.14…...
RT-Thread+STM32L475VET6——TF 卡文件系统
文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行USB配置1.1 使用外部高速时钟,并修改时钟树1.2 打开SPI1,参数默认即可(SPI根据自己需求调整)1.3 打开串口,参数默认1.4 生成工程 2.配置SPI2.1 打开SPI驱动2.2 声明使用SPI…...
排序链表--字节跳动
少年的书桌上没有虚度的光阴 题目描述 请你对链表进行排序 思路分析 核心思想:归并排序 有三个部分 链表排序实现 1. merge 函数 21.见 合并两个有序链表, 首先创建一个虚拟头节点 newhead,并使用指针 tail 来构建合并后的链表。 通过…...
[论文解析]OmniRe: Omni Urban Scene Reconstruction
OmniRe: Omni Urban Scene Reconstruction 论文地址:https://arxiv.org/abs/2408.16760 代码地址:https://github.com/ziyc/drivestudio 项目地址:https://ziyc.github.io/omnire/ 论文解读 总结 这篇论文代表了一种重建的方向࿰…...
【微服务优化】ELK日志聚合与查询性能提升实战指南
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
Docker实战-使用docker compose搭建博客
docker run 部署 创建blog网络 [rootk8s-master ~]# docker network create blog 8f533a5a1ec65eae3f98c0ae5a76014a3ab1bf3c087ad952cdc100cc7a658948 [rootk8s-master ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8f533a5a1ec6 blog bridge …...
python 虚拟机的使用方式
Python虚拟机(PVM)是Python语言的核心运行机制,它通过解释和执行字节码来运行Python代码。以下是关于Python虚拟机的详细使用方式: 1. Python虚拟机的基本概念 Python虚拟机(PVM)是一个抽象的计算机&…...
【JT/T 808协议】808 协议开发笔记 ② ( 终端注册 | 终端注册应答 | 字符编码转换网站 )
文章目录 一、消息头 数据1、消息头拼接2、消息 ID 字段3、消息体属性 字段4、终端手机号 字段5、终端流水号 字段 二、消息体 数据三、校验码计算四、最终计算结果五、终端注册应答1、分解终端应答数据2、终端应答 消息体 数据 六、字符编码转换网站 一、消息头 数据 1、消息头…...
番茄工作法html实现
对比了deepseek-r1-online和本地部署的14b的版本,输出的输出的html页面。 在线满血版的功能比较强大,可以一次完成所有要求。14b版本的功能有一些欠缺,但是基本功能也是写了出来了。 input write a html named Pomodoro-clock which “hel…...
抓包工具 wireshark
1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...
51单片机学习之旅——定时器
打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…...
hot100_139. 单词拆分
hot100_139. 单词拆分 思路 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入:…...
Linux firewalld 常用命令
本文参考RedHat官网文章How to configure a firewall on Linux with firewalld。 Firewalld 是守护进程名,对应命令为firewall-cmd。帮助详见以下命令: $ firewall-cmd --helpUsage: firewall-cmd [OPTIONS...]General Options-h, --help Pr…...
《网络安全入门实战手册》
0经验转行网络安全,个人分享一下学习中总结的文档,以下为目录可以点击标题看对应文章,欢迎评论区讨论,后期会发更多安全相关的学习资料等。希望跟大家一起进步。 第1章:网络安全基础知识 1、什么是网络安全ÿ…...
SQLMesh 系列教程7- 详解 seed 模型
SQLMesh 是一个强大的数据建模和管道管理工具,允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型,主要用于初始化和填充基础数据集。它通常包含静态数据,如参考数据和配置数据,旨在为后续的…...
windows11那些事
一.windows11简介 Windows11是微软公司于2021年发布的桌面端操作系统,它带来了许多新的功能和改进,旨在提升用户体验和工作效率。以下是一些关于Windows 11的基础知识和使用技巧: 通用搜索:通过任务栏上的搜索或按Windows…...
VividTalk:南京大学、阿里巴巴等机构联合研发的开源3D说话人生成框架
目录 一、前言二、项目概述三、技术架构四、优势特点五、性能评估六、应用场景七、结论与展望 一、前言 在当今人工智能飞速发展的时代,人机交互的方式正不断创新和优化。VividTalk作为南京大学、阿里巴巴、字节跳动和南开大学联合开发的一项开创性技术,…...
pyside6学习专栏(三):自定义QLabel标签扩展类QLabelEx
标签是界面设计中最常用的控件,本文演示了如何基于PySide6的QLabex控件类扩展定义QLabelEX类,以实现更少的编码完成各种图像、彩色文本、动画的加载和显示,丰富界面显示 本示例演示了QLabel和其扩展类QLabelEx分别显示文本、图像、动画的使用…...
后“智驾平权”时代,谁为安全冗余和体验升级“买单”
线控底盘,正在成为新势力争夺下一个技术普及红利的新赛点。 尤其是进入2025年,比亚迪、长安等一线传统自主品牌率先开启高阶智驾的普及战,加上此前已经普及的智能座舱,舱驾智能的「科技平权」进一步加速行业启动「线控底盘」上车窗…...
springboot408-基于Java的樱洵宾馆住宿管理系统(源码+数据库+纯前后端分离+部署讲解等)
💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm…...
C语言中 %* 的用法总结
C语言中 %* 的用法总结 一、scanf 中的 %* 作用:跳过输入字段,读取数据但不存储到变量。语法:%*[格式] 示例格式:%*d(跳过一个整数)、%*s(跳过一个字符串)。 适用场景:…...
