1. 环境
MacOS 10.15.3
CLion
Clickhouse 20.8.1.1
2. 代码编译
可按官网进行配置,The Beginner ClickHouse Developer Instruction
- 工具准备
- brew
安装命令: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - 使用brew安装编译器工具库
安装命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" (如果这里没法正确安装可以在网上直接下载安装包安装,然后配置环境变量)
- 拉取Clickhouse源码
命令:git clone --recursive git@github.com:ClickHouse/ClickHouse.git 可以在github按需求拉取对应版本代码。 - 本地编译源码
命令: $ cd ClickHouse #创建build目录 $ mkdir build #执行编译命令 $ cmake .. -DCMAKE_CXX_COMPILER=`which clang++` -DCMAKE_C_COMPILER=`which clang` $ ninja $ cd ..
注意 cmake .. -DCMAKE_CXX_COMPILER=which clang++ -DCMAKE_C_COMPILER=which clang命令时可能会出现如下报错:
CMake Error at CMakeLists.txt:149 (message):
Cannot find objcopy.
解决步骤如下:
brew install binutils mdfind -name objcopy
执行完之后后应该回返回类似下面的查询结果:
/Users/mac/Documents/GitHub/ClickHouse/contrib/llvm/llvm/utils/gn/secondary/llvm/tools/llvm-objcopy
/usr/local/Cellar/binutils/2.35/share/man/man1/objcopy.1
/usr/local/Cellar/binutils/2.35/x86_64-apple-darwin19.5.0/bin/objcopy
/usr/local/Cellar/binutils/2.35/bin/objcopy
objcopy的目录为/usr/local/Cellar/binutils/2.35/bin/objcopy
修改前:
find_program (OBJCOPY_PATH NAMES "llvm-objcopy" "llvm-objcopy-10" "llvm-objcopy-9" "llvm-objcopy-8" "objcopy")
修改后:
find_program (OBJCOPY_PATH NAMES "llvm-objcopy" "llvm-objcopy-10" "llvm-objcopy-9" "llvm-objcopy-8" "objcopy" PATHS "/usr/local/homebrew/Cellar/binutils/2.35/x86_64-apple-darwin19.3.0/bin/")
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_CXX_COMPILER=`which clang++` -DCMAKE_C_COMPILER=`which clang` -DCMAKE_BUILD_TYPE=Debug -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
3. 本地调试
编译完代码之后会在../../build/programs目录下生成一个Clickhouse文件
3.1 运行本地服务
命令: ../../build/programs/clickhouse server /Users/test/users.xml
默认情况下,Clickhouse会在本地找config文件,可以通过参数--config-file手动指定
执行结果如上。
3.2 调试
在CLion的菜单栏中点击run,选在Attach to Process
在弹出框中输入clikchouse,选择对应进程。
没问题的话,就可以正常打断点调试了。
尝试本地客户端连接,执行sql。
命令:
../../build/programs/clickhouse client --host 127.0.0.1 --user admin --password 123
执行语句: select version,成功在断点出停止执行。
|