版本控制系统: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 $< > $@