postgresql - 使用 CMake 安装 libpq 依赖项

标签 postgresql cmake libpq

我正在 Windows 上使用 CMake 构建一个程序。该程序依赖于 libpq,这是 che C PostgreSQL 库。

我加载 PostgreSQL 包,CMake 找到它以及它构建的程序。但后来我想复制 libpq.dll 及其对构建文件夹的依赖项以便使用它。我已在构建后命令中复制了 libpq.dll,但这还不够,因为它依赖于其他库。

复制 libpq.dll 及其所需的所有文件以解决所有依赖关系的最佳方法是什么?

cmake_minimum_required (VERSION 3.10)

project (postgresqldatabase)
set (CMAKE_INCLUDE_CURRENT_DIR ON)

find_package (PostgreSQL REQUIRED)

set (CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories (${CMAKE_SOURCE_DIR}/src ${PostgreSQL_INCLUDE_DIRS})

file (GLOB_RECURSE PROJECT_SRC *.cpp)

add_library (${PROJECT_NAME} SHARED ${PROJECT_SRC})
target_link_libraries (${PROJECT_NAME} ${PostgreSQL_LIBRARIES})

# Copy PostgreSQL .dll files on bin folder if we are on Windows
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  # It prints C:\Program Files\PostgreSQL\9.4\lib
  message (STATUS "paths are ${PostgreSQL_LIBRARY_DIRS}")
  # It prints  C:/Program Files/PostgreSQL/9.4/lib/libpq.lib
  message (STATUS "libraries are ${PostgreSQL_LIBRARIES}")
  add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PostgreSQL_LIBRARY_DIRS}/libpq.dll $<TARGET_FILE_DIR:${PROJECT_NAME}>)
  # I need to copy also dll's needed to libpq.dll
endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")

最佳答案

在我的项目中,我使用专用的 libs 文件夹。我发现我需要以下 DLL:

  • libeay32.dll
  • libiconv-2.dll
  • libintl-8.dll
  • libpq.dll
  • ssleay32.dll

这也通过 DependencyWalker 进行了验证,也许在需要更多功能的项目中,您可能需要一些其他 dll,但对于基本的 SQL 操作来说,这些都是集合。

关于postgresql - 使用 CMake 安装 libpq 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51040263/

相关文章:

c - Postgresql 和 libpq 。查询从随机数量的子进程中删除

c++ - 使用 pqexecparams 通过 libpq 插入点

postgresql - 货币类型 : remove currency symbol without type casts

postgresql - 更新 Postgresql 中的计数列

Windows 上的 cmake "exporting"共享库

c - 在 CMake 中获取完整的编译命令

cmake - FindPostgreSQL.cmake 无法在 ubuntu 上运行

mysql - redshift 查询以获得所需的输出

sql - 从 PostgreSQL 数据库获取每月和每年的运行总计

cmake - CPack NSIS,为 Windows 生成安装程序