PostgreSQL не находится с помощью CMake (CLion, Windows)
Возникла проблема при попытке подключения PostgreSQL к проекту на C++ (взаимодействие планируется осуществлять с помощью библиотеки pqxx): СУБД не находится никоим образом, несмотря на все попытки и поиски решения проблемы, выдаётся ошибка "(message): Could NOT find PostgreSQL (missing: PostgreSQL_LIBRARY)". В результате поисков и попыток, на данный момент CMakeLists.txt выглядит так:
cmake_minimum_required(VERSION 3.24)
project(Database_1)
set(CMAKE_CXX_STANDARD 17)
LINK_DIRECTORIES("C:/Program Files/PostgreSQL/16/lib")
set(PostgreSQL_ADDITIONAL_VERSIONS "16.4")
set(PostgreSQL_INCLUDE_DIR "C:/Program Files/PostgreSQL/16/include")
set(PostgreSQL_LIBRARY_DIR "C:/Program Files/PostgreSQL/16/lib")
set(PostgreSQL_ROOT "C:/Program Files/PostgreSQL/16")
message(STATUS "PostgreSQL_INCLUDE_DIRS: ${PostgreSQL_INCLUDE_DIRS}")
message(STATUS "PostgreSQL_LIBRARIES: ${PostgreSQL_LIBRARIES}")
find_package(PostgreSQL REQUIRED)
add_executable(Database_1 main.cpp)
target_link_libraries(Database_1 PRIVATE PostgreSQL::PostgreSQL)
target_include_directories(Database_1 PRIVATE ${PostgreSQL_INCLUDE_DIRS})
find_package(libpqxx REQUIRED)
target_link_libraries(Database_1 PRIVATE pqxx)
Message выводит следующее ничего:
-- PostgreSQL_INCLUDE_DIRS:
-- PostgreSQL_LIBRARIES:
В чём может быть проблема?
UPD1: Лог CMake
-- PostgreSQL_INCLUDE_DIRS:
-- PostgreSQL_LIBRARY_DIRS:
CMake Error at /cygdrive/c/Users/Павел/AppData/Local/JetBrains/CLion2022.3/cygwin_cmake/share/cmake-3.24.2/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find PostgreSQL (missing: PostgreSQL_LIBRARY) (found version
"16.4")
Call Stack (most recent call first):
/cygdrive/c/Users/Павел/AppData/Local/JetBrains/CLion2022.3/cygwin_cmake/share/cmake-3.24.2/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/cygdrive/c/Users/Павел/AppData/Local/JetBrains/CLion2022.3/cygwin_cmake/share/cmake-3.24.2/Modules/FindPostgreSQL.cmake:272 (find_package_handle_standard_args)
CMakeLists.txt:15 (find_package)
UPD2: Проблема успешно решена, как обычно корень всех бед крайне смешон. Через отладку CMake удалось заметить, что PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES собирает имена файлов, характерные для UNIX-систем. Винда же предсказуемо от такого ничего не понимала и нужные файлы не находила. А виной всему использование Cygwin вместо MinGW, на MinGW постгрес находится без проблем... Большое спасибо @Ingvar за помощь!
Ответы (1 шт):
С учетом заданных путей в Path до папок bin / include / lib PostgreSQL (C:\Program Files\PostgreSQL\15\include и т.п.)
Попробуй в этом порядке:
#-- Ищем PostgreSQL
find_package(PostgreSQL REQUIRED)
message("[MAIN] Found PostgreSQL VER: " ${PostgreSQL_VERSION_STRING})
message("[MAIN] Include files PostgreSQL: " ${PostgreSQL_INCLUDE_DIRS})
message("[MAIN] Lib files PostgreSQL: " ${PostgreSQL_LIBRARY_DIRS})
//----------------------------------------------------
соответственно (порядок инструкций важен!):
include_directories(AFTER ${PostgreSQL_INCLUDE_DIRS})
link_directories(AFTER ${PostgreSQL_LIBRARY_DIRS})
add_library(plgconnector SHARED
plgconnector_global.h
tconnector.cpp
tnotifyer.cpp
tquery.cpp
treader.cpp
tconnector.h
pgerror.ui
pgerror.h
pgerror.cpp
sqlhighlighter.h
sqlhighlighter.cpp
sqlloghlighter.h
sqlloghlighter.cpp
)
if (WIN32)
target_link_libraries(plgconnector PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets
libpq.lib
)
endif(WIN32)
if (UNIX AND NOT APPLE)
target_link_libraries(plgconnector PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets pq)
endif()