OceanBase Mac/Win Clion 开发环境搭建

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

作为一个离开 IDE 不会写代码的人,怎么能用 vim 来搞 OB 呢。看了眼 OB 的官方文档,他们推荐使用 VS Code 的 ccls 来索引代码,我试了一下,索引慢的离谱,而且跳转能力也不行,说实话不如不用。

准备工作

  1. Mac/Windows
  2. Clion
  3. Orb / 远程 Ubuntu 机器,这里我用的是 orb 在 Mac 机器上起了一个 Ubuntu 24 ARM 的虚拟机,充当远程开发机。

目标

Clion 能指哪打哪,全部无红线。

修改的代码自动同步到远端 Ubuntu 机器上面。

编译是在远端的 Ubuntu 上面进行,本机不参与编译。

环境准备

我在 orb 上面创建一个 Ubuntu 24.10 的虚拟机。

orb

接下来是安装一下必备软件并且 pull 代码。

ssh orb
sudo apt install git wget rpm2cpio cpio make build-essential binutils m4 libtool-bin cmake rsync
git clone https://gitee.com/oceanbase/oceanbase.git
cd oceanbase

编译+部署

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 的库。但是问题是 Clion 识别不到这个参数(我经过试验猜测的),导致其不会去拉取 GCC 的 headers,然后 Clion 会报红线。

所以这里我们要让 Clion 误以为我们仍然使用 GCC 来编译 OB,但是你需要注释掉一些编译选项,确保 CMake 在 Clion 能执行通过(因为有些编译参数在 GCC 中是不支持的)。

Toolchains 配置:

Toolchains

CMake 配置:

CMake 设置

CMake options 解释:

-DOB_ENABLE_UNITY=OFF #一定要关闭,不然 Clion 识别不出来
-DOB_CC=gcc # 强制使用 gcc
-DOB_CXX=g++ # 强制使用 g++
-DOB_USE_LLD=OFF # 关闭,避免 CMake 执行报错

Deployment 代码同步设置

Deployment 同步设置

修改 cmake/Env.cmake 文件:

注释下面两行,因为这些参数 GCC 是不认识的。

CMake 设置

修改 deps/oblib/src/lib/oblog/ob_log_module.h 文件:

按照我这个 PR 修改即可:https://github.com/oceanbase/oceanbase/pull/2228。不然你的 LOG_WARN 啥的,全是红线。

当然如果后面 OB 官方合入了这个 PR,那就不用修改了。

拷贝第三方库:

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 就没问题了。

自此就大功告成了。

TIPS

其实如果你用 Clion 直接打开 orb 里面的 OB 项目,可以直接省去文件同步的过程,同时三方库 headers 的同步也不需要自己手动处理了。

你用 Windows 的 WSL2 也一样方便,与 orb 流程类似,Clion 直接去打开 wsl2 里面的工程即可。有一说一,用高性能的 x86 台式机跑 Clion 是真爽,索引快,内存也大,性能管够。

原创文章,作者:Smith,如若转载,请注明出处:https://www.inlighting.org/archives/oceanbase-mac-win-dev-env-setup

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

发表回复

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