【问题标题】:How to compile ClickHouse in CLion?如何在 CLion 中编译 ClickHouse?
【发布时间】:2023-02-10 15:34:42
【问题描述】:

我正在尝试在 CLion 中构建 ClickHouse。

我关注official documentation。我能够从命令行构建 ClickHouse,但是,我也希望能够在 CLion 中构建它。

该文档没有给出太多关于如何做到这一点的信息,只是暗示这是可能的。 ClickHouse 的GitHub Issues search by 'CLion' 也没有提供太多建议。

ClickHouse 使用 CMake 和 Ninja。该文档提到可以使用 Ninja 或 make 而不是 Ninja 在 CLion 中进行编译。

我都试过了,但有很多错误。例如,在将 CMake 设置设置为 -G Ninja 的情况下运行时,我能够构建目标 common,但在构建目标 clickhouse-client 时出现以下错误:

====================[ Build | clickhouse-client | Debug ]=======================
/usr/bin/cmake --build /tmp/tmp.CAA3nJhi8z/cmake-build-debug --target clickhouse-client
[1/7338] Generating lber-version.c
FAILED: contrib/openldap-cmake/lber-version.c 
cd /tmp/tmp.CAA3nJhi8z/contrib/openldap && /usr/bin/cmake -E env bash -c "/tmp/tmp.CAA3nJhi8z/contrib/openldap/build/mkversion -v '2.5.X' liblber.la > \"/tmp/tmp.CAA3nJhi8z/cmake-build-debug/contrib/openldap-cmake/lber-version.c\""
bash: /tmp/tmp.CAA3nJhi8z/contrib/openldap/build/mkversion: Permission denied
[18/7338] Building CXX object contrib/..._/icu/icu4c/source/i18n/calendar.cpp.o
ninja: build stopped: subcommand failed.

我还在 CLion 中使用远程工具链在服务器上构建,而不是我的笔记本电脑。由于这是一个权限问题,我假设我必须从 sudo 运行构建,但我不确定该怎么做,并且搜索只提供了关于 How to debug as root in CLion 的指南。

问题2。在 CLion 中加载 CMake 后,我在 ClickHouse 项目的根目录中的 CMakeLists.txt 中没有看到任何绿色箭头是否可以?我只能在右上角的下拉列表中看到目标 (screenshot)。

问题#3。我也不确定如何在 CLion 中构建所有二进制文件。例如。在命令行中,我只会运行ninja,但在 CLion 中有很多目标,而且没有一个像build all 那样命名。

非常感谢任何指向解决方案的指针。

【问题讨论】:

    标签: cmake compilation clion clickhouse ninja


    【解决方案1】:

    回答您的第一个问题可能对某人有所帮助。

    由于您使用的是远程构建,Clion 首先将所有源文件复制到远程机器。并且如果不启用Settings -> Build,Execution,Deployment -> Deployment -> Options -> Preserve original file permissions选项,则不会保存运行某些脚本的可执行权限。这打破了构建。

    因此,您可以启用此选项并重新上传文件,或手动为将记录在错误消息中的文件设置权限x

    【讨论】: