FindPostgreSQL

查找 PostgreSQL 安装 - 客户端库(libpq)和可选的服务器。

导入的目标

此模块提供以下 导入目标

PostgreSQL::PostgreSQL

3.14 版新增。

封装了必需的 libpq 客户端库和可选请求的 PostgreSQL 服务器组件的所有使用需求的 Target。此 Target 仅在找到 PostgreSQL 时可用。

结果变量

此模块定义了以下变量

PostgreSQL_FOUND

一个布尔值,指示是否已找到 PostgreSQL 的最低要求版本和组件。

PostgreSQL_LIBRARIES

链接所需的 PostgreSQL 库。

PostgreSQL_INCLUDE_DIRS

包含 PostgreSQL 头文件的目录。

PostgreSQL_LIBRARY_DIRS

包含 PostgreSQL 库的目录。

PostgreSQL_VERSION_STRING

找到的 PostgreSQL 版本。

PostgreSQL_TYPE_INCLUDE_DIR

包含 PostgreSQL 服务器头文件的目录。

组件

此模块支持以下附加组件

Server

在 3.20 版本中添加。

确保也找到了服务器头文件。请注意,无论是否在 find_package() 调用中指定此组件,PostgreSQL_TYPE_INCLUDE_DIR 变量都会被设置。

示例

查找 PostgreSQL 客户端库并将其链接到项目 Target

find_package(PostgreSQL)
target_link_libraries(project_target PRIVATE PostgreSQL::PostgreSQL)

指定 PostgreSQL 的最低要求版本

find_package(PostgreSQL 11)

使用 Server 组件查找 PostgreSQL 客户端库并要求服务器头文件,提供了一个具有所有使用需求的导入 Target,然后可以将其链接到项目 Target。

find_package(PostgreSQL COMPONENTS Server)
target_link_libraries(project_target PRIVATE PostgreSQL::PostgreSQL)

在检查 PostgreSQL 客户端库功能时,某些功能通过 libpq-fe.h 头文件中的预处理器宏指示(例如 LIBPQ_HAS_PIPELINING)。其他功能可能需要使用 check_symbol_exists() 命令。

find_package(PostgreSQL)
target_link_libraries(project_target PRIVATE PostgreSQL::PostgreSQL)

# The PQservice() function is available as of PostgreSQL 18.
if(TARGET PostgreSQL::PostgreSQL)
  include(CheckSymbolExists)
  include(CMakePushCheckState)

  cmake_push_check_state(RESET)
  set(CMAKE_REQUIRED_LIBRARIES PostgreSQL::PostgreSQL)
  check_symbol_exists(PQservice "libpq-fe.h" PROJECT_HAS_PQSERVICE)
  cmake_pop_check_state()
endif()