| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 【Linux】gcc/g++ 和 gdb && git工具的基本使用方式 -> 正文阅读 |
|
[系统运维]【Linux】gcc/g++ 和 gdb && git工具的基本使用方式 |
文章目录1. Linux编译器-gcc/g++使用C 语言在 Linux 下,一般使用 gcc 编译 C 语言代码。gcc 可以通过包管理工具进行安装,以 Centos 为例:
接下来,我们编译一个非常简单的 C 语言程序 hello_world代码如下: 你可以使用任何编辑工具来编写代码,nano 、 vim ,甚至记事本均可(这里我使用vim)。 代码编辑完毕后,运行 gcc 命令进行编译:
其中, -o 选项指定可执行程序名, hello_world.c 是源码文件。不出意外,当前目录下将出现一个可执行文件:
最后,还是在命令行下,将程序运行起来。看,程序输出预期内容:
C++ 语言C++ 语言编译与 C 语言类似,只不过编译工具不再是 gcc ,而是 g++ 。同样地, g++ 也可以通过包管理工具来安装:
还是编译一个简单的程序 hello_world.cpp ,代码如下: 运行 g++ 命令进行编译,用法与 gcc 一样:
编译完毕后,执行程序:
编译流程我们以下面这个代码为例子去了解编译流程
生成预处理后的.i文件
用vim打开hello.i文件查看内容
可以看到对比hello.c 和hello.i 文件后,.i文件的代码一下子变成了八百多行,原因就是头文件在.i中展开了,然后在.i 文件中注释也被删掉,宏定义也完成了替换!
生成预处理后的.s文件
用vim打开hello.s文件查看内容
可以看到这步完成了从C语言代码转化成了汇编代码
用vim打开hello.o文件查看内容
可以发现里面都是乱码,其实这都是二进制
生成可执行文件
这个文件可以直接运行
在这里涉及到一个重要的概念:函数库
函数库一般分为静态库和动态库两种。
我们使用下面的命令生成一个静态链接的程序
gcc选项
gcc选项记忆的一些小技巧: 编译过程:ESc(对比键盘左上角的esc),生成的文件后缀iso(对比镜像文件后缀的ISO) 2. Linux调试器-gdb使用gdb 程序交互调试GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具; GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 以下从一个完整的调试过程简单说明最基本的几个命令;
注意点
运行
设置断点
查看源代码
查看变量
3. Linux项目自动化构建工具-make/Makefile为什么需要make/Makefile会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编
Makefile介绍make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建 只要我们的makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自动编译所需要的文件和链接目标程序。 Makefile简单的用法这里简单介绍一下它的用法 我们用test.c ,add.h,add.c三个文件当例子 首先需要手动创建一个Makefile文件,并打开输入以下命令
makefile的规则在讲述这个makefile之前,还是让我们先来粗略地看一看makefile的规则。
然后我们在命令行中直接输入
即可直接生成mybin可执行文件 我们继续打开Makefile文件,并输入下面命令 我们回到命令行中输入
可以发现前面生成的mybin可执行文件已经被清理 所谓的伪目标就是:“总是被执行的” 什么意思呢? 我们可以在命令上多次输入make,可以发现它并没有帮我们执行,因为mybin已经存在了,而且并没有修改源文件,它觉得没必要 重新生成了 但是下面的指令呢?
我们回到Makefile文件中,修改成下面的画面 再来多次执行make命令 可以看到这次将mybin设置成伪目标后,也变成了“总是被执行” 提出疑问为什么clean需要写成
为什么mybin不需要写成
我们来看这样的一些现象:把Makefile中的clean移动到第一行,再去make 可以看到这次make执行的是rm -rf mybin这条命令 这就说明了其实 在Makefile中,执行make命令的时候,如果不指定具体目标,它就会默认执行第一个目标 首先要理解这个的原理,需要知道一些储备知识 查看一个文件的属性信息的一个命令
比如我们查看一下上面的test.c文件的属性
change时间会受到modify行为的影响,因为如果向文件写入内容,表示着它的大小会变化,从而就是改变了它的属性 根据了解上面的基础知识,我们就可以很容易的解释为什么make能判断该文件有没有必要重新编译, 其实就是根据生成的可执行程序(例如上面的mybin)的修改时间,然后再根据源文件修改时间进行判断,如果 可执行程序的时间比源文件的时间要更新或者说更晚,就不会进行重新生成可执行程序,从而减少不必要编译过程
make总结在默认的方式下,也就是我们只输入
这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。 通过上述分析,我们知道,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令—— 于是在我们编程中,如果这个工程已被编译过了,当我们修改了其中一个源文件,比如 而如果我们改变了 4. 使用 git 命令行概述Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统如果中央服务器宕机则会影响数据和协同开发。 Git是分布式的版本控制系统,客户端不只是提取最新版本的快照,而且将整个代码仓库镜像复制下来。如果任何协同工作用的服务器发生故障了,也可以用任何一个代码仓库来恢复。而且在协作服务器宕机期间,你也可以提交代码到本地仓库,当协作服务器正常工作后,你再将本地仓库同步到远程仓库。 特性
为什么要用Git
Git常用命令
git设置忽略特殊文件忽略文件的原则
设置的方法在项目下编辑 .gitignore 文件 具体要把什么文件屏蔽可以手动添加 比如我不需要把后缀为.exe可执行文件上传 gitignore 不生效解决方法原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 6:36:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |