作为一个离开 IDE 不会写代码的人,怎么能用 vim 来搞 OB 呢。看了眼 OB 的官方文档,他们推荐使用 VS Code 的 ccls 来索引代码,我试了一下,索引慢的离谱,而且跳转能力也不行,说实话不如不用。
准备工作
- Mac/Windows
- Clion
- Orb / 远程 Ubuntu 机器,这里我用的是 orb 在 Mac 机器上起了一个 Ubuntu 24 ARM 的虚拟机,充当远程开发机。
目标
Clion 能指哪打哪,全部无红线。
修改的代码自动同步到远端 Ubuntu 机器上面。
编译是在远端的 Ubuntu 上面进行,本机不参与编译。
环境准备
我在 orb 上面创建一个 Ubuntu 24.10 的虚拟机。
接下来是安装一下必备软件并且 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 配置:
CMake 配置:
CMake options 解释:
-DOB_ENABLE_UNITY=OFF #一定要关闭,不然 Clion 识别不出来
-DOB_CC=gcc # 强制使用 gcc
-DOB_CXX=g++ # 强制使用 g++
-DOB_USE_LLD=OFF # 关闭,避免 CMake 执行报错
Deployment 代码同步设置
修改 cmake/Env.cmake
文件:
注释下面两行,因为这些参数 GCC 是不认识的。
修改 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