使用CMake安装libpq依赖项

时间:2018-06-26 10:09:41

标签: postgresql cmake libpq

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

我加载了PostgreSQL软件包,CMake找到了它以及它所构建的程序。但是然后我想将libpq.dll及其依赖项复制到build文件夹以使用它。我已经在构建后的命令中复制了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")

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

不确定这是否能解决您的问题,但对我有用:

find_package(PostgreSQL REQUIRED)
include_directories (${PostgreSQL_INCLUDE_DIRS})
link_directories(${PostgreSQL_LIBRARY_DIRS})

此外,这解决了我遇到这个问题时遇到的问题,所以希望这会对其他人有所帮助。