OceanBase Mac/Win Clion 开发环境搭建

这篇文章介绍了如何通过 Clion 配置 OceanBase(OB)开发环境,核心目标是实现在 Mac 或 Windows 上使用 Clion 指哪打哪且无报错红线,同时代码和编译都同步到远端的 Ubuntu 环境中完成。文章详细讲解了工具链配置、CMake 调整、代码同步设置,以及修复 Clion 在识别 OB 三方库和代码时的各种问题,最终实现远程高效开发。附带一些 tips,让整个流程更简单快捷。

OceanBase 作为一个大型的 C++ 项目,使用 Clion 能够明显提升开发效率,其很多功能是 VS Code 所不具备的。目前 OB 官网推荐使用 VS Code + ccls 插件来索引代码,但是其索引慢的离谱,而且跳转能力也一般,说实话不如 ctrl/command + f 大法好。

这里就写一篇教程,教大家如何在 Mac/Win 上面配置 Clion,丝滑的进行开发。

准备工作

  1. Mac/Windows 的电脑一台
  2. Clion
  3. 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 出来就行了。

Mac OrbStack
Win wsl2

接下来 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 配置:

Toolchains

CMake 配置:

CMake 设置

CMake options 解释:

-DOB_ENABLE_UNITY=OFF #一定要关闭,不然 Clion 识别不出来
-DOB_CC=clang-14 # 强制使用 ubuntu 自己的 clang-14
-DOB_CXX=clang++-14 # 强制使用 ubuntu 自己的 clang++-14

Deployment 代码同步设置

Deployment 同步设置

修改 cmake/Env.cmake 文件:

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

CMake 设置

拷贝第三方库:

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

打赏 微信扫一扫 微信扫一扫
SmithSmith

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注