《OceanBase开发者手册》之二 如何设置IDE开发环境

Abstract

《OceanBase开发者手册》 主要指导开发者如何参与到OceanBase 的研发, 铺平参与OceanBase 开发的准备工作遇到的问题, 当前章节大概这几篇文章, 未来可能会增加部分文章, 目前OceanBase 源码参考OceanBase 开源官网的《开源数据库OceanBase源码解读》 系列 :

  1. 如何编译OceanBase源码
  2. 如何设置IDE开发环境
  3. 如何成为OceanBase Contributor
  4. 如何修改OceanBase文档
  5. 如何debug OceanBase
  6. 如何运行测试
  7. 如何修bug ​

本文将介绍如何在开发环境中, 设置编译器, 重点设置编译器的 code format 工具 -- clang-fromat。 本文内容来自内部同事分享, 该设置可以分享给所有的c/c++ 项目中.

clang-format是clang(一个面向C系语言的轻量级编译器)中一个工具,主要负责代码的格式化和排版工作,可独立于clang工作,所以经常被单独用来用作代码规范格式化,很多第三方插件也都集成了clang-fromat。clang-format与各个IDE集成. clang-format 差不多已经快成为c/c++ 上实时的代码格式化标准.

步骤

vscode

既然看到这步了,我就姑且认为你已经装好了vscode,如果没有的话,可以先移步vscode官网下载

STEP 1

首先确保你的开发环境下的vscode安装了C/C++扩展; 这里要注意vscode远程和本地vscode插件不共用

STEP 2

在setting中对Clang_format_style进行设置, 确认C/C++扩展的配置Clang_format_style 设置成file (此处默认是file,如果不放心可以检查一下);

STEP 3

将准备好的.clang-format文件拷贝到工程目录下(部分项目工程目录下已存在)

STEP FINAL

恭喜你已经完成vscode 中clang format 设置, 如果前面都完成了的话,那么在vscode中格式化代码时就会自动根据.clang-format配置格式化文件

eclipse

STEP 1:

首先需要在你的开发环境下载clang-format (此处后面推广的时候提供wget包下载或者其他更通用的方式)

1
$brew install clang-format
或者可以下载整个LLVM然后在目录下找到clang-format, 记录下clang-format的路径. Linux/Mac环境下最好拷贝至/usr/bin目录下,方便直接命令执行.

当执行$OBDEV_ROOT/build.sh --init 后, 会自动下载clang-format, 你可以在这里看到它

1
2
find ./ -name clang-format
./deps/3rd/usr/local/oceanbase/devtools/bin/clang-format
## STEP 2: eclipse中安装插件CppStyle

STEP 3:

配置 CppStyle中clang-format的路径:

1
2
(如果你CppStyle插件安装成功并重启的话,就会有这项配置)
Preferences -> C/C++ -> CppStyle
将之前下载的clang-format路径配置到Clang-format path中去

STEP 4:

配置 Code Formatter 为CppStyle:

1
Preferences -> C/C++ -> Code Style -> Formatter
将里面Code Formatter的配置选中下拉框选项 CppStyle(clang-format) (如果前面流程正确走完,此处应有此选项)

STEP 5:

将准备好的.clang-format文件拷贝到工程目录下(部分项目工程目录下已存在)

STEP FINAL:

此时就完成了所有准备工作,在eclipse编写代码的时候,格式化代码的时候,就会自动引用.clang-format的配置重新编排代码

CLion

啊,写攻略终于写到一个轻松的了,JetBrains YYDS! CLion天然集成了clang-format,所以只需要确认几项配置即可

STEP 1:

随便打开某个.h/.c/.cpp文件,在右下角点击'4 spaces' 然后选择Enable ClangFormat

如果此处没有'4 spaces',而是直接就是ClangFormat,那么就是CLion自动识别到存在.clang-format文件,帮忙配置好了

STEP 2:

确认'Enable ClangFormat'配置是否打开(这个CLion也是默认开启的)

1
Preferences -> Editor -> Code Style

STEP 3:

将准备好的.clang-format文件拷贝到工程目录下(部分项目工程目录下已存在)

STEP FINAL:

CLion就可以直接使用clang-format进行格式化了,当执行Reformat Code时就会自动编排代码

VIM

STEP 1:

首先需要clang-format.py文件我们可以直接去github上面把对应文件拷贝下来;

STEP 2:

然后配置当前用户的.vimrc文件(如果没有的话,在当前用户的根目录下创建.vimrc文件即可)

1
2
3
4
5
6
7
8
map <C-K> :pyf <path-to-this-file>/clang-format.py<cr>
imap <C-K> <c-o>:pyf <path-to-this-file>/clang-format.py<cr>

function! Formatonsave()
let l:formatdiff = 1
pyf <path-to-this-file>/clang-format.py
endfunction
autocmd BufWritePre *.h,*.cc,*.cpp call Formatonsave()
代码块中的 '' 替换成之前拷贝下来的clang-format.py的路径,然后保存并重启终端

PS:前面两行是增加主动触发clang-format功能

1
2
3
normal模式下,ctrl+k将格式化一行代码
visual模式下,ctrl+k将格式化选中代码
insert模式下,ctrl+k将格式化一行代码
最后一段的function则是当使用vim保存当前.h/.cc/.cpp文件时,会自动将文件所有内容格式化 ## STEP 3: 将准备好的.clang-format文件拷贝到工程目录下(部分项目工程目录下已存在)

STEP FINAL:

完成前面的工作,vim就成功集成了clang-format,只不过需要注意的是,使用的时候先需要cd到工程路径下,并确保工程路径下已有.clang-format文件,然后在该路径下,使用vim去修改文件即可(在使用vim时就不要切换当前目录啦)

EMACS

EMACS貌似很强大的一个编辑器(都不确定是否应该称之为编辑器),但是对新人来说学习成本略高,折腾了一个晚上才勉强搞定😅 如果看这一块的话,我就默认大家已经了解了emacs的一些基本操作,展开讲可以单开一个系列的语雀了,所以我这里只放出和clang-format集成相关的操作了,其他的不做过多讲解 STEP 1: 首先需要在你的开发环境下载clang-format (此处后面推广的时候提供wget包下载或者其他更通用的方式)

1
brew install clang-format
或者可以下载整个LLVM然后在目录下找到clang-format Linux环境下需要拷贝至/usr/bin目录下 MAC环境也需要配置到对应PATH路径中

当执行$OBDEV_ROOT/build.sh --init 后, 会自动下载clang-format, 你可以在这里看到它

1
2
find ./ -name clang-format
./deps/3rd/usr/local/oceanbase/devtools/bin/clang-format

STEP 2:

然后需要使用package-install安装clang-format包,如果没有的话,可以修改package sources,这里展示一下我使用的sources配置:

1
2
3
("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
("org-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/")
("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
## STEP 3: 安装完成后,找到安装的插件位置,我的是mac系统,安装位置在用户根目录下
1
.emacs.d/elpa/clang-format-20191106.950
找到该路径下的clang-format.el文件,讲该文件的路径配置到.emacs配置文件中去(配置路径自行根据实际情况调整):
1
(load "/Users/xxx/.emacs.d/elpa/clang-format-20191106.950/clang-format.el")
PS:如果是mac系统的话比较麻烦,mac系统使用GUI打开emacs时,shell里面配置的环境变量是不会自动带过来的,这个时候需要在.emacs中额外配置一些内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun set-exec-path-from-shell-PATH ()
"Set up Emacs' `exec-path' and PATH environment variable to match
that used by the user's shell.

This is particularly useful under Mac OS X and macOS, where GUI
apps are not started from a shell."
(interactive)
(let ((path-from-shell (replace-regexp-in-string
"[ \t\n]*$" "" (shell-command-to-string
"$SHELL --login -c 'echo $PATH'"
))))
(setenv "PATH" path-from-shell)
(setq exec-path (split-string path-from-shell path-separator))))

(set-exec-path-from-shell-PATH)
## STEP 4: 将准备好的.clang-format文件拷贝到工程目录下(部分项目工程目录下已存在)

STEP FINAL:

现在就已经完成了clang-format的集成工作,在开发中,只需要在文件编辑界面执行M-x clang-format-buffer 即可。此时clang-format会自动向本级及父级目录找到.clang-format文件,并根据文件配置格式化代码