OceanBase 作为一个大型的 C++ 项目,使用 Clion 能够明显提升开发效率,其很多功能是 VS Code 所不具备的。目前 OB 官网推荐使用 VS Code + ccls 插件来索引代码,但是其索引慢的离谱,而且跳转能力也一般,说实话不如 ctrl/command + f
大法好。
这里就写一篇教程,教大家如何在 Mac/Win 上面配置 Clion,丝滑的进行开发。
准备工作
- Mac/Windows 的电脑一台
- Clion
- OrbStack 或 Ubuntu 机器,用于编译部署 OB。Mac 用 OrbStack,Win 可以通过 wsl2 起一个 Ubuntu 出来。这里 Mac 我用OrbStack 起了一个 Ubuntu 24 ARM 的虚拟机,Win 用 wsl2 起了一个 Ubuntu 24 x86
本次目标
- Clion 能指哪跳哪,代码全部无红线
- 修改的代码自动同步到远端 Ubuntu 机器上面
- 编译是在远端的 Ubuntu 上面进行,本机不参与编译
环境准备
Mac 用户在 OrbStack 上面创建一个 Ubuntu 24.10 的虚拟机。Win 用户你自己通过 wsl2 起个 Ubuntu 出来就行了。


接下来 ssh 进系统,安装一下必备软件并 pull 代码。
sudo apt install git wget rpm2cpio cpio make build-essential binutils m4 libtool-bin cmake rsync
git clone https://github.com/oceanbase/oceanbase.git
cd oceanbase
git checkout master # master 才是最新代码,develop 分支其实不算最新
编译+部署
OB 编译这块做的不错,我竟然在 Ubuntu 24 ARM 上面,能一键就可以编译通过。
./build.sh --init
cd build_debug
make -j4 # 因为我怕 Mac 发热严重,只敢给 4 个并发编译。
# 一键部署启动 observer
./tools/deploy/obd.sh prepare -p /home/smith/obtest
./tools/deploy/obd.sh deploy -c ./tools/deploy/single.yaml

你可以通过 ./tools/deploy/obd.sh --help
这里查询其他集群管理命令。
Clion 配置
先说下核心思想,OB 使用了 clang-11 来编译,然后其通过在 cmake/Env.cmake
指定 --gcc-toolchain=${GCC9}
来使用了 GCC 9 的库。
OB 在 deps/oblib/src/CMakeLists.txt
引入了三方库,这部分我们也要能让 Clion 识别到。
所以我们的 Clion 要完成下面几件事情才能顺利对代码进行分析:
- 索引 OB 自身的代码
- 加载 GCC 9 的 headers
- 加载 clang-11 的 headers
- 加载第三库的 headers
因为 Clion 直接用 OB 自带的 clang-11 会报错,所以这里我就让 OB 使用 Ubuntu 上面的 clang-14 来曲线救国。
sudo apt install clang-14
Toolchains 配置:

CMake 配置:

CMake options 解释:
-DOB_ENABLE_UNITY=OFF #一定要关闭,不然 Clion 识别不出来
-DOB_CC=clang-14 # 强制使用 ubuntu 自己的 clang-14
-DOB_CXX=clang++-14 # 强制使用 ubuntu 自己的 clang++-14
Deployment 代码同步设置

修改 cmake/Env.cmake
文件:
加上一行 set(GCC9 "/usr/")
,让 OB 编译的 --gcc-toolchain
使用 Ubuntu 系统自己的 gcc 库。如果你用 OB deps/
目录下的 gcc 库,Clion 是不认识的,因为其目录摆放不符合规定。

拷贝第三方库:
Clion 不知道为啥,目前对于 deps/oblib/src/CMakeLists.txt
下面依赖的第三方库识别有问题,导致其不会拉取远端的三方库的 headers。
这个你可以看 src/sql/engine/basic/ob_select_into_op.h
这个文件,你会发现三方库都是红线。
所以我们需要采用 scp 的方式(Clion 自带的 sync 功能也可以),直接从远端拷贝三方库的 headers 到本地目录。
只需要同步远端的 oceanbase/deps/3rd/usr/local/oceanbase/deps/devel/include
目录到本地 mac 的相同目录即可,Clion 会自动重新索引,然后 ob_select_into_op.h
就没问题了。
mkdir -p ./deps/3rd/usr/local/oceanbase/deps/devel/
scp -r orb:~/remote-code/oceanbase/deps/3rd/usr/local/oceanbase/deps/devel/include ./deps/3rd/usr/local/oceanbase/deps/devel/include
自此就大功告成了。
TIPS
其实如果你用 Clion 直接打开 orb 里面的 OB 项目,可以直接省去文件同步的过程,同时三方库 headers 的同步也不需要自己手动处理了。
你用 Windows 的 WSL2 也一样方便,与 orb 流程类似,Clion 直接去打开 wsl2 里面的工程即可。有一说一,用高性能的 x86 台式机跑 Clion 是真爽,索引快,内存也大,性能管够。
OB 源码工程比较大,建议调整 Clion 的 JVM 内存,我是调成如下内存 -Xms1024m -Xmx8192m
。
遇到诡异的问题,请直接清理 Clion 相关 cache File -> Invalidate Caches
。
原创文章,作者:Smith,如若转载,请注明出处:https://www.inlighting.org/archives/oceanbase-mac-win-dev-env-setup