Linux中常用工具(续)

一.gcc/g++

二.gdb

三.make&makefile

四.git

一.gcc/g++

gcc/g++:编译器——将高级语言代码解释成为二进制机器指令

编译过程:预处理,编译,汇编,链接

gcc常见操作选项:gcc -E   -S  -c  -o

        例如main.c:gcc -E main.c -o main.i

                         gcc -S main.i -o main.s

                         gcc -c main.s -o main.o

                         gcc  main.o -o main

链接:就是将所有的源码指令以及库文件中的指令进行打包合并到一起

        动态链接:链接动态库,将库中的函数符号信息记录到可执行程序中,生成的可执行程序较小,内存中冗余代码较少,但是会产生运行时依赖

        静态链接:链接静态库,将库中使用到的函数的实现直接写入到可执行程序中,生成的可执行程序较大,内存中有可能会存在代码冗余,但是不会产生运行依赖

gcc编译器默认链接方式:动态链接

二.gdb

        gdb:调试器-调试程序的运行过程,快速排查程序出问题的位置

        调试前提:生成可以被调试的程序(debug程序),在编译代码时使用gcc -g选项(gcc默认生成release版本程序)

        加载程序:gdb ./main

        开始调试:start,run

        逐步调试:next, step,until main.c:12, list main.c:12

        断点调试:break main.c:12       break function_name;  infor break(显示断点信息)

                 delete break_id(删除断点); continue

        内存操作:print var=10(访问变量并可修改变量值)      backtrace

三.make&makefile

        make&makefile:项目的自动化构建工具

        makefile:一个普通的文本文件,其中可以记录一个项目的构建规则

        makefile编写规则:

                目标对象:依赖对象

                 [tab]规则指令

        make解释规则:

                make在当前执行make指令的目录下找到makefile文件,然后在makefile中查找生成规则

                1.make查找第一个目标对象,作为终极目标对象

                2.检测依赖对象与目标对象的时间关系,判断目标对象是否需要重新生成

                        若目标对象不存在,则需要生成;   在目标对象生成依赖对象又有了修改,则需要生成

                3.若目标对象需要生成,但是依赖对象不存在或者需要重新生成,则会查找依赖对象的生成规则先进行生成

                4.如果需要生成则执行规则指令

                        make在完成了终极目标对象(makefile中的第一个目标对象)的指令执行之后就会退出,因此如果一个对象,不是第一个目标对象(终极目标)的依赖对象,则这个对象将默认不会被生成,需要通过make进行指定生成:make clean

main:main.o child.o child.h
    gcc main.o child.o -o main
main.o:main.c child.h
    gcc -c main.c -o main.o
child.o:child.c child.h
    gcc -c child.c -o child.o
.PHONY:clean
clean:
    rm -rf main.o child.o main

        makefile中的其他编写规则:

                1.伪对象:与外部的实际文件解除关联关系,表示这个对象无论如何都要进行规则指令的执行 

                声明:.PHONY:clean         将clean对象声明为伪对象

                自动变量/预定义变量:在不同位置表示不同数据的内置变量

                        $<    所有依赖对象中的第一个

                        $^     所有依赖对象

                        $@    目标对象

                        这些自动变量都是出现在规则指令中的

                函数:

                        $(wildcard ./*.c)获取指定规则的文件名

                        $(patsubst %c, %o, $(var))  字符串替换  (将var变量中的内容.c替换成.o)

三.git

        git:项目的版本管理工具,对代码进行托管,并进行版本管理

        优点:1.托管备份,容灾性强

                   2.版本管理,随时可以进行版本回滚

        git三板斧:git clone:从托管服务器克隆一个分支仓库到本地

                           git add --all ./:将当前目录下的所有修改进行登记

                           git commit -m "当前版本的备注--以便于以后回滚"

                           git push orign master  将本地仓库的版本同步到托管平台

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值