Установить зависимость libpq с CMake - PullRequest
0 голосов
/ 26 июня 2018

Я создаю программу с CMake на Windows. Программа имеет зависимость от libpq это библиотека C PostgreSQL.

Я загружаю пакет PostgreSQL, CMake находит его и программу, которую он собирает. Но затем я хочу скопировать libpq.dll и его зависимости в папку сборки, чтобы использовать его. Я скопировал libpq.dll в команде post build, но этого недостаточно, потому что это зависит от других библиотек.

Какой лучший способ скопировать 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")

1 Ответ

0 голосов
/ 03 сентября 2018

В моем проекте я использую специальную папку libs. Я обнаружил, что мне нужны следующие библиотеки DLL:

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

Это также было проверено с помощью DependencyWalker, возможно, в проекте, требующем большего количества функций, вам могут понадобиться другие dll, но для базовой операции SQL это был набор.

...