目录
五、Linux项目自动化构建工具-make/Makefile
Linux作为一个自由和开放源码的操作系统,其环境具有高度的灵活性和可定制性。无论是在服务器、桌面应用、嵌入式系统还是云计算等领域,Linux都凭借其出色的性能和稳定性赢得了广泛的认可。本文将深入探讨Linux环境的构建、配置以及其对应用程序和系统性能的影响。
一、Linux开发需要什么?
1. 学习yum工具,进行软件安装
2. 掌握vim编辑器使用,学会vim的简单配置
3. 掌握gcc/g++编译器的使用,并了解其过程,原理
4. 掌握简单gdb使用于调试
5. 掌握简单的Makefile编写,了解其运行思想
6. 编写自己的第一个Linux 程序:进度条
7. 学习 git 命令行的简单操作, 能够将代码上传到 Github 上
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.
yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上
代码如下(示例):
yum list | grep lrzsz
通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只 筛选出我们关注的包.
通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装..
sudo yum install lrzsz
在root账户下执行vim /etc/sudoers

之前没有配置就只有root账户,想要在那个账户下使用sudo,那么就将那个账户名添加进来,内容如图
sudo yum remove lrzsz
sudo yum remove+卸载软件名
vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
正常/普通/命令模式(Normal mode) 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode 插入模式(Insert mode) 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
该模式是我们后面用的最频繁 的编辑模式。
末行模式(last line mode) 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。
在命令模式下,shift+: 即可进入该模 式。
要查看你的所有模式:打开vim,底行模式直接输入 :help vim-modes 我这里一共有12种模式:six BASIC modes和six ADDITIONAL modes.
进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
$ vim test.c
不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文 字。
[正常模式]切换至[插入模式]
输入a
输入i
输入o
[插入模式]切换至[正常模式] 目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,
可 以先按一下「ESC」键转到[正常模式]再删除文字。
当然,也可以直接删除。 [正常模式]切换至[末行模式] 「shift + ;」
, 其实就是输入「:」 退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
: w (保存当前文件)
: wq (输入「wq」,存盘并退出vim)
: q! (输入q!,不存盘强制退出vim)

插入模式 按「i」切换进入插入模式「insert mode」,
按“i”进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令模式 按「ESC」键。
移动光标
vim可以直接用键盘上的光标来上下左右移动,
但正规的vim是用小写英文字母
「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
按「$」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l
按[gg]:进入到文本开始
按[shift+g]:进入文本末端
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f」:屏幕往“前”移动一页
按「ctrl」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页 删除文字
「x」:每按一次,删除光标所在位置的一个字符
「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「dd」:删除光标所在行 「
#dd」:从光标所在行开始删除#行
复制 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完 成复制与粘贴功能。
替换 「r」:替换光标所在处的字符。
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
撤销上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回 复。
「ctrl + r」: 撤销的恢复
更改 「cw」:更改光标所在处的字到字尾处 「
c#w」:例如,「c3w」表示更改3个字 跳至指定的行
「ctrl」+「g」列出光标所在行的行号。 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
控制光标

格式 gcc [选项] 要编译的文件 [选项] [目标文件]
格式 g++ [选项] 要编译的文件 [选项] [目标文件]
gcc用来编译c语言代码
g++用来编译c++
问题来了;那么g++可以编译c语言吗?
答案是可以的;以为c++兼容c语言;
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-
w 不生成任何警告信息。
-Wall 生成所有警告信息。
gcc选项记忆 esc,iso例子

自动化:make 和 Makefile 极大地简化了编译和构建过程,使开发人员无需手动执行每个步骤。这节省了大量时间,并减少了出错的可能性。
可移植性:通过编写跨平台的 Makefile,可以在不同的操作系统和环境中构建项目。这使得项目的部署和维护变得更加容易。
依赖管理:Makefile 可以清晰地表示文件之间的依赖关系。当源代码文件发生更改时,make 会自动确定哪些目标需要重新构建,从而避免不必要的编译。
并行构建:make 支持并行构建,可以同时处理多个目标,进一步提高构建速度。
易于理解:尽管 Makefile 的语法可能有些复杂,但一旦掌握了基本概念,就可以很容易地理解项目的构建过程。这对于新加入项目的开发人员来说非常有帮助。
灵活性:Makefile 提供了丰富的功能和选项,可以根据项目的需求进行定制。开发人员可以使用条件语句、变量和模式规则等功能来构建复杂的构建过程。
简单的说就是将我们想要完成的指令放在makefile里面,然后make一下,我们就可以将makefile里面的指令给执行了;
当我们有10个苹果(看作10条指令),我们一次只能运输一个苹果,当我们放在箱子里面一次就可全运走(箱子看作makefile这个文档),我们要运输,只需要make一下即可;

当我们有一个date的c++代码需要多次调式,我们需要进行编译,我们可以touch一个makefile文件,想要打开这个文档我们vim一下就可了;

- .PHONY:clean
- clean:
- rm -f hello.i hello.s hello.o hello
上面的文件 Date ,它依赖 Date.o Date.o , 它依赖 Date.s Date.s , 它依赖 Date.i Date.i , 它依赖 Date.c
这个就是关系
gcc hello.* -option hello.* ,就是与之对应的依赖关系
工程是需要被清理的
像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行, 不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编 译。
但是一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是,总是被 执行的。
可以将我们的hello目标文件声明成伪目标,测试一下。
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项
gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
f inish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb
yum install git
1. 登陆成功后, 进入个人主页, 点击左下方的 New repository 按钮新建项目
gitee官网
2. 然后跳转到的新页面中输入项目名称(注意, 名称不能重复, 系统会自动校验. 校验过程可能会花费几秒钟). 校验 完毕后, 点击下方的 Create repository 按钮确认创建.
3. 在创建好的项目页面中复制项目的链接, 以备接下来进行下载.
git clone [url]
这里的 url 就是刚刚建立好的 项目 的链接
第一招: git add
将代码放到刚才下载好的目录中
git add [文件名]
将需要用 git 管理的文件告知 git
第二招: git commit
提交改动到本地
git commit .
最后的 "." 表示当前目录 提交的时候应该注明提交日志, 描述改动的详细内容.
第三招: git push
同步到远端服务器上
git push
需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了
配置免密码提交
https://blog.csdn.net/camillezj/article/details/55103149
会在linux上写代码和编译