使 CLion 开发 PostgreSQL 插件时开启代码高亮

501 阅读3分钟

CLion 的局限性

CLion 是由 JetBrains 开发的跨平台集成开发环境(IDE),主要用于 C 和 C++ 开发。 由于我之前在 Java 开发中使用过 IDEA,因此对 JetBrains 的用户界面十分熟悉,选择 CLion 来开发 C 语言显得十分自然。 然而,尽管 CLion 对 CMake 和 Meson 提供了良好的支持,其对 Makefile 的支持仍然存在显著的局限性。

这种局限性在开发 PostgreSQL 插件时尤为突出,常见的问题包括以下提示:

This file does not belong to any project target, code insight features might not work

这个提示伴随的是CLion缺乏代码高亮和代码洞察功能,使开发过程变得更加困难。针对不同插件代码组织方式,本文提供了一些解决方案。

PostgreSQL 插件的开发环境限制

PostgreSQL 是一个高度可扩展的关系型数据库,允许开发者通过插件(Extensions)来扩展其功能,例如新增数据类型、操作符、函数、索引以及与外部数据源的连接等。 插件通常采用 C 语言编写,并集成到 PostgreSQL 的插件框架中。

在将插件编译到 PostgreSQL 中时,通常有两种编译方式可选:contribPGXS

使用 contrib 进行插件编译

contrib 是 PostgreSQL 源码树下的一个目录,包含了一些官方维护的扩展和工具。 由于插件的源码与 PostgreSQL 源码紧密集成,这种方式适用于与 PostgreSQL 源码深度结合的插件开发。

在这种源码组织方式下,只要 PostgreSQL 本身能够在 CLion 中实现代码高亮,contrib 目录下的插件通常也能够实现代码高亮。

理论上,PostgreSQL 支持使用 Meson 进行构建。 因此,如果使用 contrib 方式组织的插件包含有 meson.build 文件,可以通过以下步骤来进行构建:

# 安装 Meson
sudo dnf install meson

# 进入项目目录
cd /path/to/your/proj

# 构建项目
meson setup builddir
meson compile -C ./builddir

使用 PGXS 进行插件编译

PGXS(PostgreSQL Extension Building Infrastructure)是一种常见的构建 PostgreSQL 插件的机制, 旨在简化插件的编译和安装过程。PGXS 是 PostgreSQL 自带的扩展框架,提供了便捷的编译工具,使得插件可以独立于 PostgreSQL 源码树进行开发。

这种方式通过 Makefile 进行构建,通常通过如下命令进行插件的编译和安装:

# 进入项目目录
cd /path/to/your/proj

# 运行 configure 以生成 Makefile
./configure

# 尝试进行编译
make USE_PGXS=1

尽管可以成功运行 make,但由于 CLion 对 Makefile 的支持存在局限,代码并不能被正确地高亮显示。

有两种方法可以解决这一问题:

  1. 手动编写 CMakeLists.txt:将项目转换为 CMake 项目,以便 IDE 识别。不过,这种方式需要耗费较多精力和时间,因此不推荐。
  2. 使用 compiledb 工具compiledb 是一种生成 JSON 格式编译数据库的工具,广泛应用于 C/C++ 项目,以便与基于编译数据库的工具(如代码分析器和编辑器插件)集成。

只要本地环境能够使用 PGXS 进行编译,compiledb 的使用过程也相对简便。其基本原理是通过捕获编译过程中的所有编译命令,生成一个名为 compile_commands.json 的文件。 这个文件是 JSON 格式的编译数据库,其中记录了项目中所有源文件的编译信息。 CLion 或其他支持编译数据库的工具可以读取这些信息,从而实现代码高亮、自动补全等功能,大幅提升开发体验。

使用 compiledb 可以按照以下步骤操作:

# 使用 pip 安装 compiledb
pip install compiledb

# 使用 compiledb 建立 compile_commands.json,方便 IDE 识别
compiledb make USE_PGXS=1

成功创建 compile_commands.json 后,CLion 就能够对插件代码进行高亮和其他智能分析,从而使开发工作更加高效。