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

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.xdnf.cn/news/4252.html

相关文章:

  • 双目标清单——AI与思维模型【96】
  • 高等数学第四章---不定积分(§4.3分部积分法4.4有理真分式函数的不定积分)
  • 应对联网汽车带来的网络安全挑战
  • FTPS和SFTP(文件传输安全协议)
  • 拨叉831003加工工艺及钻φ22花键底孔夹具设计
  • 量子跃迁:破解未来计算的“时空密码”​
  • 如何在vscode中set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`
  • Linux下的c/c++开发之操作mysql数据库
  • 【东枫科技】代理英伟达产品:DPU
  • Android View#post()源码分析
  • Android 中解决 annotations 库多版本冲突问题
  • 网络安全等级保护有关工作事项[2025]
  • BGP优化
  • 【计算机网络-应用层】HTTP服务器原理理解以及C++编写
  • 从设备交付到并网调试:CET中电技术分布式光伏全流程管控方案详解
  • QT异步线程通信
  • Linux 更改内存交换 swap 为 zram 压缩,减小磁盘写入
  • Android学习总结之Java和kotlin区别
  • Listremove数据时报错:Caused by: java.lang.UnsupportedOperationException
  • 深度解读 ARM 全新白皮书——《重塑硅基:AI 时代的新基石》
  • RabbitMQ-api开发
  • 美团Java高级配送员面经分享|玩梗版
  • Python实例题:高德API+Python解决租房问题
  • Spring Web MVC————入门(1)
  • 15.Spring Security对Actuator进行访问控制
  • 2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛初赛-wp
  • OpenGl实战笔记(2)基于qt5.15.2+mingw64+opengl实现纹理贴图
  • Mysql order by 用法
  • 国标GB28181视频平台EasyCVR安防系统部署知识:如何解决异地监控集中管理和组网问题
  • Latex排版问题:图片单独占据一页