git、gdb、makefile等工具使用

版本控制系统:CVS、SVN均是集中式的版本控制系统,而Git是分不式版本控制系统

集中式版本控制系统:版本库是集中存放在中央服务器的,工作时客户端先连到服务器,取出最新的文件或者提交最新

分不式版本控制系统:每个人电脑都有完整的版本库


git  clone   项目URL  将项目下载到本地。


本地创建一个目录,在该目录下,git init , 就会在该目录下创建一个git版本仓库。

git  config  --global  user.nme  "name1"

git  config  -- global  user.email  "mailaddress1"


git status  查看仓库中的状态

git   add filename   将文件添加到缓存区

git   rm    --cached  filename1 将文件从缓存区移除


使用 git   commit    提交以后,缓存区将被清空  -m "label"  (参数m是打标签)


将本地仓库管理到远端服务器可以使用   git   remote   add    hostname   URL

如果本地的仓库连接到了远程Git服务器,使用  git   push  hostname   master  会将本地仓库同步到远端服务器


git  branch  branch_name  创建开发分支 (在很多组协同完成一个任务时,分支不会影响主线。当分支完成后再与主线合并)

git  branch  查看所有分支,并标明当前在哪个分支(*号标明)。

gti  checkout   branch_name  切换分支    : 在分支下修改某个文件内容后, 添加到缓存区,提交,在该分支下可以看到改变,但是切换到其它分支后,将看不到改变后的内容。


要将两个不同分支合并(即同步)  git  merge   branch_name1  将分支1与master合并。

当合并后不需要分支时, git  branch  -d  branch_name1  (只能删除已经完全合并了的分支)

要强制删除某个分支时, 使用  git branch -D  branch_name1 

要恢复到初始未修改状态 。    git   reset   --hard   HEAD^


git  log  显示所有的提交日志信息


/////////////////////////////////////            GDB使用            /////////////////////

使用gcc编译时加 -g  即可使用 gdb 调试工具。

进行调试:  gdb   可执行文件名

run  运行程序;   list 列出程序代码;  b(break)  line_num   打断点;   b  function_name  函数开始执行时打断点

n(next)执行下一行   s(step)一次执行一次   finish  运行到函数结束   c(continue)运行到函数结束  info b   显示断点信息    u(until) 执行到指定行


////////////////////////////////////                 makefile           /////////////////////////

makefile的意义:1 在使用gcc编译时,大项目往往需要写大量的文件名   2   当项目中的某个文件修改后,只需重新连接即可。(所以分析依赖关系,避免不必要的编译过程)

句法规则:     目标 : 依赖

                        tab      command  ;   

一般 变量名采用大写方式。 (目标文件列表采用小写)

make  -f   makefile_name  指定makefile的文件名

?=  条件赋值, 只有在没有对变量进行赋值的情况下才会对这个变量进行赋值。

$@  --代表规则中的目标文件名; $<   --代表规则的第一个依赖的文件名;  $^   --代表规则中所有依赖文件的列表,文件名用空格分割


伪目标:  当项目编译玩抽,会有可执行文件及中间目标文件,有时需要将编译生成的文件都删除,让整个项目回到最初的状态。则可在项目makefile定义添加一条目标为clean的规则

eg ,                           clean :

                                   tab    rm    -rf    test1.o  test2.o  test 

一般情况下make clean会正常工作,但当当前目录下有一个clean文件时将会出现问题(提示 clean已经是最新的),所以就衍生出了伪目标,表示它不代表一个真正的文件名。 声明伪目标:

  eg,                            .PHONY: clean

                                       clean :

                                        tab     rm   -rf  test1.o test2.o  test 

makefile中命令通常都会回显(即在将命令输出),在命令前加@可关闭回显

%为makefile文件的通配符 。  * 为 shell可识别的通配符。


wildcard函数 source := $(wildcard  PATTERN) 列出当前目录下所有符合模式“PATTERM”格式的文件名

deps := $(source:.c=.d)变量的引用替换。  将所有.c 替换为.d    (:=是表示赋值时覆盖之前的值)

sinclude $(deps)导入依赖关系文件

$(deps):%.d:%.c     生成依赖关系

tab    gcc  -MM  $<  >  $@

猜你喜欢

转载自blog.csdn.net/u013565071/article/details/80646958