目录
gcc/g++
基本概念
指令集
函数库 (重要)
gdb使用
基本概念
指令集
项目自动化构建工具make/makefile
进度条小程序
编辑
git三板斧
创建仓库
git add
git commit
git push
git status
git log
gcc/g++
基本概念
gcc/g++称为编译器
进行四个过程:
预处理:头文件展开,去注释,条件编译,宏替换等等操作
编译:检查语法,生成汇编代码
汇编:将汇编代码转换成机器码
链接:生成可执行文件或库文件
指令集
-o +文件:输出到该文件
-static:采用静态链接
-g:生成调试信息
gcc -E :文件预处理完毕后,不进行编译。该指令不生产文件,需要-o指令将文件内容输出到指定文件中。
gcc -S:文件编译完毕后,不进行汇编。生成文件后缀.s
gcc -c:文件汇编后,不进行链接。生成文件后缀.o
gcc +文件 -o 文件名:对文件执行这四个过程 -o指令:指定可执行程序名
当然我们编译一个程序时,不必使用-E,-S,-c这些指令。
只需要gcc 文件 -o 指定文件名 即可完成
函数库 (重要)
c程序当中,如果要使用一个函数,不仅需要函数声明,还需要定义,但是我们所包含的头文件stdio.h当中,只有printf函数的声明,没有其定义,但是我们却可以完成调用?为什么呢?
这是因为系统把c函数的定义都放到libc.so.6这个库当中了,gcc会到默认的/usr/lib路径下进行查找,找到函数定义,这也就是动态链接过程。
函数库分为静态库和动态库,一般以.so结尾为动态库,.a结尾为静态库。
静态链接是指编译链接时把库文件代码全部拷贝到该文件,生成的文件比较大。
动态链接是指程序运行时链接库,到库中找到函数定义,然后完成调用。
gcc默认生成的文件是动态链接的。
gdb使用
基本概念
gdb是linux下的调试器。
如果要对一个程序进行调试,在编译时一定要使用-g指令加入调试信息。
因为一般默认生成的程序是release版本,不支持调试。
指令集
- list 或 l +行号或函数名:显示源代码,接着上次的位置每次列10行,如果是函数则从函数入口显示。
- r或run :运行程序
- n或next:单条代码执行,相当于vs当中的f10,不进入函数。
- s或step:相当于vs当中f11,可以进入函数内部。
- break或b+行号:在改行设置断点
- break+函数名:在函数入口设置断点
- info b:查看断点信息
- finish:直接执行完改函数,然后停下来等待命令
- continue:跳到下一个断点
- until+n:一般在函数内部使用,跳到指定行
- p+变量:打印变量值
- display+变量名:追踪变量,每次停下来都显示该变量值
- undisplay+变量号:取消对变量追踪
- delete b:删除所有断点
- delete b +n :删除n号断点
- disable b n :禁用n号断点
- enable b n:启用n号断点
- bt:查看各级函数调用
- set var :修改变量值
- info locals:查看当前栈帧内局部变量值
- print(p):打印表达式的值,通过表达式可以修改变量值或调用函数
项目自动化构建工具make/makefile
make是指令,而makefile是文件。
通过make和makfile可以实现项目自动化编译,极大提高效率。
实例:
makefile内部:1.依赖关系
2.依赖方法
- make会在当前目录下找名为“makefile”或”Makefile“的文件
- make找到的是第一个目标文件,也就是test,如果test不存在,那它就会根据依赖关系和依赖方法去创建这个目标文件。
- make会一层一层找依赖关系,直到编译出第一个目标文件
- 找寻过程中,如果被依赖文件找不到,那么make直接退出,并报错,而对于所定义的命令错误,或者编译不成功,make不管。
- make成功生成目标文件后,如果目标文件所依赖的文件内容没有改变,此时又进行make,那么该make是不被执行的。
- 用.PHONY修饰的文件称为伪目标,该目标与第一个目标文件没有直接或间接关联,该目标总是可以被执行的。
进度条小程序
git三板斧
创建仓库
指令:git clone +gitee仓库的https
git add
将你要添加的文件先复制到仓库目录中。
然后进入仓库使用git add +文件名
git commit
git commit -m “日志信息” +文件 注意:日志信息一定要有
git push
commit完毕后,使用git push指令,然后代码就提交到gitee仓库了
git status
该指令用于查看git状态。
git log
查看git日志信息。