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()