目录
3.Linux项目自动化构建工具-make/Makefile
1.Linux编辑器-vim使用
![](https://img-blog.csdnimg.cn/749f216c25c84d109ec90fdd6d0de429.png)
vim 指令的学习
命令模式
yy:将当前光标所在的行
p:将复制行进行粘贴
nyy复制n行 np粘贴n行(n是具体的数字)
u:撤销操作
ctrl + r:撤销u操作
shift + g:光标定位到文件的结尾
gg:光标定位到文件的最开始
n + shift +g:光标定位到文件的任意行
shift + 6(^)∶将光标定位到当前行的最开始
shift + 4($)︰将光标定位到当前行最结尾
w, b:以单词为单位进行光标的前后移
h,j, k,l:左,下,上,右
shiftt~:大小写切换
shift + r :进入替换模式(s也可以替换)
r:替换光标所在的字符,支持nr
底行模式
set no/ nonu:打开行号,或者取消行号
vs文件名:分屏操作
w:写入,w!
q:退出,q!
: ! cmd:不退出vim执行对应的命令(执行命令行,编译,运行,查看man)等
2.Linux编译器-gcc/g++使用
gcc常见选项:
![](https://img-blog.csdnimg.cn/ddfb3d88489c41ccb5150292a6a2749a.png)
-o 用于指定目标文件名称
-g 生成debug程序。向程序中添加调试符号信息
![](https://img-blog.csdnimg.cn/a130da635d534af8b054b59024162ba1.png)
动静态库概念
函数库一般分为静态库和动态库两种。
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。其后缀名一般为“.a”
3.Linux项目自动化构建工具-make/Makefile
1 mytest:mytest.c //依赖关系
2 gcc mytest.c -o mytest //依赖方法
3
4 .PHONY:clean //伪目标
5 clean: //依赖关系
6 rm -f mytest //依赖方法
编写makefile,1是依赖关系,2是依赖方法。 这里mytest依赖mytest.c
make就是执行makefile里面的代码,标准是从上到下执行,但是clean是总是被执行的
那么makefile是如何得知,我的可执行程序是最新的?? ?
根据文件的最近修改时间来的!!
makefile中的伪对象表示对象名称并不代表真正的文件名,与实际存在的同名文件没有相互关系,因此伪对象不管同名目标文件是否存在都会执行对应的生成指令
4.Linux写一个小程序-进度条
首先要了解\n和\r的概念
\n是换行(换到下一个行的当前位置)
\r是回车(回到这个行的最开始)
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello Makefile!\n");
sleep(3);
return 0;
}
//这里是先打印,然后3秒后退出,先执行打印
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello Makefile!");
sleep(3);
return 0;
}
//先执行sleep,然后再打印出来
为什么结果不一样呢??
这里的区别就是加没加" \n "
(早就执行完了!! 只不过信息没有被立马显示出来!!
C语言是会给我们提供输出缓冲区的,根据特定的刷新策略,来进行刷新!
输出缓冲区就是c语言给我们提供的一段内存空间)
显示器设备,一般的刷新策略是行刷新碰到\n,就把\n之前的所有的字符全部给我显示出来
解决办法是加上fflush(stdout)
#include <stdio.h>
int main()
{
printf("hello Makefile!");
fflush(stdout);
sleep(3);
return 0;
}
进度条
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define NUM 102
int main()
{
char bar[NUM]; //定义一个数组
memset(bar, 0, sizeof(bar));//初始化数组
const char* lable = "|/-\\";//4个符号
int cnt = 0;
while (cnt <= 100)
{
printf("[%-100s][%d%%] %c\r", bar, cnt, lable[cnt % 4]);
//%s打印#用来显示进度,%d%%是百分数,后面那个是用来记录进程的,%4是因为只有四个符号
// 0 1 2 3
bar[cnt] = '#';
cnt++;
fflush(stdout);
usleep(30000);
}
return 0;
}
5.git的使用
git log 查看提交目录
git rm 删除文件
有时候会提交冲突,无脑git pull
6.yum软件包管理器
7.gdb Linux调试器
gcc && g++默认形成的可执行程序是release的!!故无法直接被调试!