BlankLin

lazy and boring

0%

mac下编译clickhouse

安装Homebrew

Homebrew要安装正确, 确保/usr/local下面出现各种share/include等目录

1
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装环境所需插件

1
brew install cmake ninja libtool gettext ccache

修正objcopy的问题

1
2
brew install binutils
ln -s /usr/local/opt/binutils/bin/objcopy /usr/local/bin/objcopy

clion打开clickouse local不成功,无法正常编译debug

1> 安装llvm

1
brew install llvm

2> 配置clion的工具链ToolChain
avatar
cmake和make是新版本就可以了,配置好c和c++编译器(compiler)使用刚装好的llvm下的clang

安装googletest

有报错ld: library not found for -lgtest

1
brew install googletest

avatar

使用支持ninja的CLion版本(可选, 最新版是支持的)

CLion中的CMake使用选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-DCMAKE_BUILD_TYPE=Debug
-GNinja
-DENABLE_CLICKHOUSE_ALL=OFF
-DENABLE_CLICKHOUSE_SERVER=ON
-DENABLE_CLICKHOUSE_CLIENT=ON
-DUSE_STATIC_LIBRARIES=OFF
-DCLICKHOUSE_SPLIT_BINARY=ON
-DSPLIT_SHARED_LIBRARIES=ON
-DENABLE_LIBRARIES=OFF
-DENABLE_UTILS=OFF
-DENABLE_TESTS=OFF
-DUSE_ROCKSDB=ON
-DENABLE_ROCKSDB=ON
-DUSE_INTERNAL_ROCKSDB_LIBRARY=ON
-DENABLE_PROTOBUF=ON
-DENABLE_GRPC=ON

avatar

点Tools->CMake→Reset Cache and Reload Project

avatar

load过程可能会遇到的错误

1
CMake Error at contrib/croaring-cmake/CMakeLists.txt:22 (add_library):Cannot find source file:…

执行git submodule update —init —recursive 重新拉取相关依赖

编译clickhouse-server

1> 点右上角锤子进行编译
avatar
2> 查看编译进度
avatar

debug方式运行

    1. debug时需要指定配置文件config.xml路径
      1
      --config-file=/Users/blanklin/Code/cpp/clickhouse-debug/conf/config.xml
      avatar
    1. 点右侧的蜘蛛按钮进行debug
      avatar

cpp快速入门

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

// main() 是程序开始执行的地方

int main()
{
cout << "Hello World"; // 输出 Hello World
return 0;
}

接下来我们讲解一下上面这段程序:

  • C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件
  • using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
  • // main() 是程序开始执行的地方 是一个单行注释。单行注释以 // 开头,在行末结束。
  • int main() 是主函数,程序从这里开始执行。
  • cout << “Hello World”; 会在屏幕上显示消息 “Hello World”。
  • return 0; 终止 main( )函数,并向调用进程返回值 0。