目录
一:自动化构建工具make/makefile
生成内容:
清理内容:
对于多过程的:
对于多次make:
特殊符号:
二:小程序之进度条
三:git的简单介绍
四:Linux调试器gdb
接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
一:自动化构建工具make/makefile
1.make是一个指令,makefile是当前目录下的文件,两个搭配使用完成项目的自动化构建
2.makefile的工作原理
生成内容:
对于make在编译的时候,会首先在当前目录下查找对应的makefile文件,再在makefile文件当中根据依赖关系和依赖方法,执行依赖方法中的内容,编译形成对应的目标文件(上面的例子中为test可执行文件)
清理内容:
这里就会发现,在清理时的指令为make clean,但在创建时只需要make就行,这是因为
make会自顶向下扫描makefile,把要形成的第一个目标文件充当make的默认动作,形成的第一个目标文件,所以谁在前,make就会先直接生成谁
所以对于其他的操作,make必须指定的去操作
形式如: make 对应的目标文件 指定名称地执行该依赖关系与匹配的依赖方法
对于多过程的:
会发现在执行时的和在makefile中的顺序是不同的,这是因为
make在扫描makefile文件时,会优先根据依赖关系,查找依赖关系中所依赖的文件列表是否在当前目录已经存在 ,如不存在,makefile会类似于递归式的去形成依赖文件,在依赖文件当中根据依赖关系和依赖方法形成对应的依赖文件,然后统一根据依赖文件形成目标文件,所以简单地说就是make会自动推导makefile中的依赖关系,这是一种栈式的结构
对于多次make:
1.可以看出对于多次执行的操作是不允许的,这是因为这样做的好处的是可以提高编译效率,避免 重复的操作
2.但这是如何做到的 ,这就得引出下面的内容了
首先一定是源文件形成可执行文件,所以一般而言源文件的最近修改时间是老于可执行文件的最近修改时间;但如果我们修改了源文件,历史上还有可执行文件的话,那么源文件的最近修改时间是一定要新于可执行文件的最近修改时间的
这样的话,就只需要比较可执行文件的最近修改时间和源文件的最近修改时间,便能做到是否允许重新编译
如果源文件的最近修改时间老于可执行文件的,不需要重新编译
如果源文件的最近修改时间新于可执行文件的,需要重新编译
一般而言这两个文件的最近修改时间是不会相同的
3.stat指令 查看源文件/可执行文件的时间
使用: stat 文件名
Access是最近访问时间
Modify是最近修改文件内容的时间(关键时间)
Change是最近修改文件属性的时间
修改三个时间
touch -a 已经存在的文件 修改文件的Access时间
touch -m 已经存在的文件 修改文件的Modify时间(修改的同时Change时间也会改变)
chmod 修改文件的Change时间(Modify时间不一定改变)
touch 文件名 修改三个时间(如果文件已经存在,则修改时间,反之是创建文件的操作)
但特殊的对于Access时间不使用touch -a 的话,他的更新策略则是根据Modify和Change的更新次数,还有最近更新的文件被访问的计数器统计的次数来决定是否更新
所以对于make是会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译,因此依赖关系是不一定总被执行的,但如果想要依赖关系总是被执行,就需要添加.PHONY来修饰
特殊符号:
二:小程序之进度条
1.回车与换行
回车是\r,换行是\n两者是不相同的,回车是回到行的开始处,换行则是到下一行
2.缓冲区
对于这段代码在执行时,总是休眠两秒后再打印出结果,那么在sleep的期间,"hello Linux"这段代码是存放在哪的?但肯定的是一定是被保存起来了,这就存放在由c语言维护的一段内存空间,即缓冲区
如果代码中有\n的话,就会立即刷新出来,没有的话就只能等缓冲区满或者代码执行完结束,因为显示器模式是行刷新
那么如果要在执行完printf后立即将结果刷新出来,可以使用fflush(stdout) 将结果强制刷新出来
这里可以实现一个倒计时
3.进度条的实现
processbar.c
processbar.h
main.c
三:git的简单介绍
git是一个具有网络功能的开源的版本控制器,集客户端与服务端于一体
安装git yum install git
将远程仓库克隆到本地 git clone 远程仓库的网址
git三板斧:(进入仓库文件中进行操作)
git add . (将仓库下没有上传的文件进行上传)
git commit -m "日志"
git push +建立仓库时的密码
其他的注意:
.git 为本地仓库(ls -al 查看)
git --version 查看版本
git log 查看日志
git status 查看提交状态
四:Linux调试器gdb
1.在Linux默认编译生成的可执行程序时release版本的,无调试信息,要想生成debug版本的话,在gcc编译时加 -g选项 生成debug 版本
可以用gdb 可执行程序 验证默认生成的为debug/release 版本,也可以进入gdb开始调试
常用操作:
q 退出
r 执行代码
b 行号/文件名:行号/函数名/文件名:函数名 对应位置设置断点信息
info b 查看断点信息
d 断点的编号(NUM) 删除断点
n 逐过程执行
s 逐语句执行
l 数字/函数名 查看gdb代码,默认显示十行,可多次回车即可显示全部(gdb会默认记录上一条命令)
p 变量名 查看变量的值(相当于监视窗口)
display 变量 每次执行都打印变量的值(常显示)
undisplay 变量最左边的编号 取消常显示
until 指定行号 程序跳转执行到指定行
先s进入调用函数内部,再finish 执行完整个调用函数就停下来
c 从断点1执行到断点2
disable 断点编号 停用断点
enable 断点编号 启用断点
set var 变量名=值 修改变量的值
bt 查看调用堆栈
info locals 查看当前函数中的定义的局部变量