linux -c程序开发

目的是在linux中创建可执行的c语言程序的步骤 和gcc,make和git的简单运用

建立可执行程序的步骤:


-1:预处理:

--:头文件展开;--去掉注释;--宏替换;--条件编译

-2:编译

--:将预处理之后的c语言替换为汇编语言带阿米

--:语法分析,语义分析,代码生成

--:检查语法正确性并且优化代码

-3:汇编:

--:将汇编代码转化为机器码

--:生成二进制文件,包含机器码和辅助信息

-4:链接

--:将多个目标文件和库文件合并为一个可执行文件

--:解析符号表,处理外部引用

使用gcc编译c语言程序:

GNU C编译器,是linux通用c语言编译器

语法格式: gcc [-选项] 文件

没有选项直接生成可执行文件

常用的选项:

E 只是预处理源文件,不编译

S 编译到汇编,生产汇编代码文件

c 编译到目标文件阶段,但是不链接(二进制文件,可以使用 objdump反汇编查看汇编代码)

o 根据编译阶段指定的输出到文件名

项目编译工具:make

为了解决:源代码关系维护苦难(把代码维护命令和编译命令卸载makefile中,利用make工具去解析文件自动执行相关的命令),减少重复编译时间(只对改动后的文件重新编译,重新链接后,可以快速看到效果)

makefile文件:这个是mkae依赖文件

特殊文本文件,包含指令和信息,详细描述了项目结果,文件间关系,编译参数设置,等待makefile编写完成,就可以实现大型项目的编译链接,清理工作

make的原理:解析makefile文件,根据目标及其依赖关系,构建依赖图,并自动执行相应的构建命令

makefile文件有若干规则,目标,依赖和命令

目标是:要产生的文件名称和动作名称

依赖文件是:用于产生目标文件的输入文件

命令是:make执行的动作,多个命令时一个占一行

make的语法规则:
make [-f 文件] [目标]

运行命令的时候,默认找:GNUmakefile /makefile / Makefile /当然也可以 -f指定

目标,如果没有指定目标就会构建第一个目标然后退出,如果有多个,就会按顺序去构建目标及其依赖关系

实例:编译软件 hello

在makefile中,如下定义

hello: hello.c

gcc -o hello hello.c

说明了hello 依赖:hello.c,hello通过gcc -o hello hello.c得来

实例2:

要编译cal软件,那么我们的makefile如下

cal 依赖与cal.o,mul.o,div.o

通过命令 gcc cal.o mul.o div.o -o cal 生成

下面的解释同上

最后的clean目标是伪目标,不依赖与任何文件

rm *.o是.o后缀文件

第一次的make会全部编译一次

但是如果第二次进行make,因为没有改变就不会有任何提示信息

如果我们通过touch,修改了创建时间,那么就会只编译修改部分

使用 make clean就可以删除所有的.o文件

Git

用于高效的处理各种规模的项目版本管理任务,开发者通过git命令来执行项目版本管理和各项操作

1,工作目录,在电脑中的目录,用于项目开发,进行文件编辑,添加和删除

2,暂存区,在本地仓库和工作目录之间的,允许用户在提交前进行组织,检查

3,本地仓库负责存储用户的所有提交,分支,标签,版本控制的核心,使得用户可以回顾历史版本,修改,创建,切换分支,或者添加标签

4,远程仓库,托管在平台or服务器上面的软件库,包含了源代码,历史记录,分支信息,配置文件,可以推送本地仓库修改,拉去仓库最新版本等

常见命令

git clone [远程仓库的链接]

git add [文件/目录]//将文件加入到暂存区

git commit -m "说明信息"//将暂存区的内容提交

git push [远程仓库] [本地分支]//把本地分支提交到远程目录

git pull [远程仓库] [分支] //拉取远程仓库的分支

git branch //列出所有本地分支

git branch name //创建一个分支

git checkuot 分支名 //切换到对应的分支

git branch -d [分支] //删除分支

git status //仓库的状态

git log //git的提交记录

git config //查看和修改git配置

当然更多的你可以去Learn Git Branching学习更多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty 是一个基于 Java NIO 的高性能网络通信框架

Netty 是一个基于 Java NIO 的高性能网络通信框架,广泛应用于构建分布式系统、RPC 框架、即时通信系统等场景。它的核心设计目标是 异步、非阻塞、高可扩展性,其底层原理涉及 事件驱动模型、线程模型、内存管理 等关键技术。以下是 Netty 的核心原理和架…

UI 库 Ant Design 中的 Table 表格和分页器:快速实现数据展示和分页功能

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

Java实现堆排序算法

1. 堆排序原理图解 堆排序是一种基于二叉堆(通常使用最大堆)的排序算法。其核心思想是利用堆的性质(父节点的值大于或等于子节点的值)来高效地进行排序。堆排序分为两个主要阶段:建堆和排序。 堆排序步骤: …

【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系

目录 引言 1 Hive审计日志概述 1.1 审计日志的核心价值 1.2 Hive审计日志类型 2 HiveServer2操作日志配置 2.1 基础配置方案 2.2 日志格式解析 2.3 日志轮转配置 3 Metastore审计配置 3.1 Metastore审计启用 3.2 审计事件类型 4 高级审计方案 4.1 与Apache Ranger…

力扣-hot100 (缺失的第一个正数)

41. 缺失的第一个正数 困难 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释&#xff…

13前端项目----购物车修改

购物车修改 uuid临时游客身份购物车部分功能全选修改商品数量修改商品勾选状态删除产品 uuid临时游客身份 请求数据仓库发起请求 ->问题:获取不到购物车数据? 所以需要一个身份,告诉服务器是谁存的数据?是要获取谁的数据&…

Mac电脑,idea突然文件都展示成了文本格式,导致ts,tsx文件都不能正常加载或提示异常,解决方案详细说明如下

有一天使用clean my mac软件清理电脑 突然发现idea出现了文件都以文本格式展示,如图所示 然后就卸载,计划重新安装,安装了好几个版本,并且setting->file types怎么设置都展示不对,考虑是否idea没卸载干净&#xff…

Nginx搭建test服务器

创建test域名 进入阿里云添加解析 创建域名:test.xxxxx.com 服务器复制项目代码 新建目录,Git拉取项目代码,安装上插件包 修改配置文件,启动测试服务 修改配置文件“服务器接口” 开启服务pm2 start app.js --name "test" 表格含义: 列名含义说明id进程在…

MyBatis-Plus 非 Spring 环境使用时 `GenericTypeResolver` 缺失问题总结

MyBatis-Plus 非 Spring 环境使用时 GenericTypeResolver 缺失问题总结 问题描述 在非 Spring 环境中使用 MyBatis-Plus 3.4.3.1 及以上版本时,启动程序会抛出以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/s…

综合案例:使用vuex对购物车的商品数量和价格等公共数据进行状态管理

文章目录 0.实现需求1.新建购物车模块cart2.使用json-server模拟向后端请求数据3.在vuex请求获取并存入数据,并映射到组件中,在组件中渲染【重点】3.1.安装axios3.2.准备actions和mutations,获取和存入数据到vuex中3.3.动态渲染:先用mapState映射list到组件页面 4.点击修改数量…

《数据结构初阶》【顺序表 + 单链表 + 双向链表】

《数据结构初阶》【顺序表 单链表 顺序表】 前言:先聊些其他的东西!!!什么是线性表?什么是顺序表?顺序表的种类有哪些? 什么是链表?链表的种类有哪些? ---------------…

Android Retrofit框架分析(三):自动切换回主线程;bulid的过程;create方法+ServiceMethod源码了解

目录 Okhttp有什么不好?bulid的过程create方法ServiceMethodcall enqueue的过程为什么要学习源码呢? 一、Okhttp有什么不好? Okhttp本身来说,是一个挺好的网络框架,但,对于开发者而言,使用起…

C++ STL 基础与多线程安全性说明文档

C STL 基础与多线程安全性说明文档 一、STL 简介 STL(Standard Template Library,标准模板库)是 C 标准库的重要组成部分,提供了常用的数据结构和算法的泛型实现,极大地提高了代码的复用性和开发效率。 STL 的六大组…

数据结构之图的分类和存储

图 图(Graph)G由两个集合V和E组成,记为:G(V,E),其中V是顶点的有穷非空集合(其实就是顶点),E是V 中顶点偶对的有穷集合(就是边)。V(G)和E(G)通常分别表示图G的顶点集合以及边集合,E(G)可以为空集合,但是此时…

扩增子分析|微生物生态网络稳定性评估之鲁棒性(Robustness)和易损性(Vulnerability)在R中实现

一、引言 周集中老师团队于2021年在Nature climate change发表的文章,阐述了网络稳定性评估的原理算法,并提供了完整的代码。自此对微生物生态网络的评估具有更全面的指标,自此网络稳定性的评估广受大家欢迎。本系列将介绍网络稳定性之鲁棒性…

setup 函数在 Vue 3 中的作用是什么?什么时候会执行

文章目录 前言✅ 一、setup() 函数的作用是什么&#xff1f;✅ 二、setup() 什么时候执行&#xff1f;✅ 三、setup() 的参数✅ 四、setup() 中不能做什么&#xff1f;✅ 五、常见用法示例✅ 六、总结&#xff08;适合背诵或面试回答&#xff09; <script setup> 是 **Vu…

JDBC实现--保姆级教程~

本来以为写过一个使用python与数据库连接的文章&#xff0c;但是今天突然发现没有&#xff0c;那就直接写Java与数据库连接的吧。当然如果大家有需要可以告诉我&#xff0c;有时间的话也可以写一个的pymysql的使用的。 数据库有很多种&#xff0c;接下来我就以MySQL为例来进行讲…

Ubuntu18.04搭建samda服务器

一.什么是Samba服务器&#xff1f; Samba服务器是一种基于开源协议实现的网络共享服务软件&#xff0c;主要用于在不同操作系统&#xff08;如Windows、Linux、Unix&#xff09;之间实现文件和打印机共享功能。其核心目标是解决跨平台资源共享的兼容性问题&#xff0c;尤其是在…

《分词算法大揭秘:BPE、BBPE、WordPiece、ULM常见方法介绍》

分词算法是自然语言处理&#xff08;NLP&#xff09;中的一个重要预处理步骤&#xff0c;它将文本分割成更小的单元&#xff08;如单词、子词或字符&#xff09;。以下是几种常见的分词算法&#xff1a;Byte Pair Encoding (BPE)、Byte-level BPE (BBPE)、WordPiece 和 Unigram…

WordPress01 - 后台常用功能

最近些日子研究Wordpress&#xff0c;做些简单的笔记。 怎么安装Wordpress&#xff0c;怎么进的后台&#xff0c;这些咱就不唠了哈&#xff0c;网上到处是教程。 目录 1&#xff0c;Wordpress的后台 1-1&#xff0c; Posts(投稿) 1-2&#xff0c;Media(媒体) 1-3&#xf…