Loading cmake/FindPostgreSQL.cmake +16 −15 Original line number Diff line number Diff line # postgresql-config.cmake # FindPostgreSQL.cmake # Unterstützt find_package(PostgreSQL) ohne REQUIRED-Flag. # Definiert das moderne Imported Target PostgreSQL::pq. set(POSTGRESQL_FOUND FALSE) # -------------------------------------------------------------------------- # 1. Suche nach Header und Bibliothek # 1. Suche nach Header und Bibliothek (Robust über find_path/find_library) # -------------------------------------------------------------------------- # Suche nach dem Haupt-Header # Suche nach dem Haupt-Header (libpq-fe.h) find_path(POSTGRESQL_INCLUDE_DIRS NAMES libpq-fe.h) # Suche nach der Bibliothek (PostgreSQL Client Library ist "pq") # CMake findet automatisch .so auf Unix oder .lib auf Windows find_library(POSTGRESQL_LIBRARIES NAMES pq) # WICHTIG: Setze FOUND nur, wenn beides gefunden wurde Loading @@ -25,10 +25,10 @@ endif() # -------------------------------------------------------------------------- if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND) # UNKNOWN erlaubt SHARED/STATIC/etc., ist aber hier nicht streng notwendig # Wir nehmen SHARED an, da libpq fast immer shared ist. # Target als SHARED und GLOBAL definieren, um Sichtbarkeitsprobleme zu vermeiden add_library(PostgreSQL::pq SHARED IMPORTED GLOBAL) # 🌟 FIX FÜR HEADER-FEHLER: Korrekte Übergabe der Header-Pfade über INTERFACE target_include_directories(PostgreSQL::pq INTERFACE ${POSTGRESQL_INCLUDE_DIRS}) set_target_properties(PostgreSQL::pq PROPERTIES Loading @@ -36,30 +36,31 @@ if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND) ) if (WIN32) # Windows-Implementierung (Hier muss der Pfad oft manuell zwischen DLL und LIB unterschieden werden) # --- Windows Implementierung (.dll/.lib) --- # 1. Ermittle das Verzeichnis der gefundenen Import Library (.lib) # Ermittle das Verzeichnis der gefundenen Import Library (.lib) get_filename_component(_POSTGRESQL_LIB_DIR "${POSTGRESQL_LIBRARIES}" DIRECTORY) # 2. Rate den Pfad zur DLL (typisch ist der gleiche Ordner) # Dies ist ein Ratversuch und kann fehlschlagen, wenn das Layout nicht Standard ist. # Rate den Pfad zur DLL (typisch ist der gleiche Ordner) set(_POSTGRESQL_DLL_PATH "${_POSTGRESQL_LIB_DIR}/libpq.dll") set_target_properties(PostgreSQL::pq PROPERTIES IMPORTED_IMPLIB_RELEASE "${POSTGRESQL_LIBRARIES}" # Die gefundene .lib IMPORTED_LOCATION_RELEASE "${_POSTGRESQL_DLL_PATH}" # Die geratene .dll # Annahmen für Debug IMPORTED_IMPLIB_DEBUG "${_POSTGRESQL_LIB_DIR}/libpqd.lib" IMPORTED_LOCATION_DEBUG "${_POSTGRESQL_LIB_DIR}/libpqd.dll" ) else() # Linux/Unix Implementierung (.so oder .a) # --- Linux/Unix Implementierung (.so) --- set_target_properties(PostgreSQL::pq PROPERTIES IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARIES}" IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARIES}" ) # libpq benötigt oft math (m) und zlib (z) # libpq benötigt oft math (m) und zlib (z) auf Unix-Systemen set_property(TARGET PostgreSQL::pq APPEND PROPERTY INTERFACE_LINK_LIBRARIES "m;z") endif() endif() # Setze die CMAKE-Standardvariable für Legacy-Kompatibilität set(PostgreSQL_LIBRARIES "PostgreSQL::pq" CACHE STRING "The PostgreSQL client library target.") Loading
cmake/FindPostgreSQL.cmake +16 −15 Original line number Diff line number Diff line # postgresql-config.cmake # FindPostgreSQL.cmake # Unterstützt find_package(PostgreSQL) ohne REQUIRED-Flag. # Definiert das moderne Imported Target PostgreSQL::pq. set(POSTGRESQL_FOUND FALSE) # -------------------------------------------------------------------------- # 1. Suche nach Header und Bibliothek # 1. Suche nach Header und Bibliothek (Robust über find_path/find_library) # -------------------------------------------------------------------------- # Suche nach dem Haupt-Header # Suche nach dem Haupt-Header (libpq-fe.h) find_path(POSTGRESQL_INCLUDE_DIRS NAMES libpq-fe.h) # Suche nach der Bibliothek (PostgreSQL Client Library ist "pq") # CMake findet automatisch .so auf Unix oder .lib auf Windows find_library(POSTGRESQL_LIBRARIES NAMES pq) # WICHTIG: Setze FOUND nur, wenn beides gefunden wurde Loading @@ -25,10 +25,10 @@ endif() # -------------------------------------------------------------------------- if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND) # UNKNOWN erlaubt SHARED/STATIC/etc., ist aber hier nicht streng notwendig # Wir nehmen SHARED an, da libpq fast immer shared ist. # Target als SHARED und GLOBAL definieren, um Sichtbarkeitsprobleme zu vermeiden add_library(PostgreSQL::pq SHARED IMPORTED GLOBAL) # 🌟 FIX FÜR HEADER-FEHLER: Korrekte Übergabe der Header-Pfade über INTERFACE target_include_directories(PostgreSQL::pq INTERFACE ${POSTGRESQL_INCLUDE_DIRS}) set_target_properties(PostgreSQL::pq PROPERTIES Loading @@ -36,30 +36,31 @@ if (NOT TARGET PostgreSQL::pq AND POSTGRESQL_FOUND) ) if (WIN32) # Windows-Implementierung (Hier muss der Pfad oft manuell zwischen DLL und LIB unterschieden werden) # --- Windows Implementierung (.dll/.lib) --- # 1. Ermittle das Verzeichnis der gefundenen Import Library (.lib) # Ermittle das Verzeichnis der gefundenen Import Library (.lib) get_filename_component(_POSTGRESQL_LIB_DIR "${POSTGRESQL_LIBRARIES}" DIRECTORY) # 2. Rate den Pfad zur DLL (typisch ist der gleiche Ordner) # Dies ist ein Ratversuch und kann fehlschlagen, wenn das Layout nicht Standard ist. # Rate den Pfad zur DLL (typisch ist der gleiche Ordner) set(_POSTGRESQL_DLL_PATH "${_POSTGRESQL_LIB_DIR}/libpq.dll") set_target_properties(PostgreSQL::pq PROPERTIES IMPORTED_IMPLIB_RELEASE "${POSTGRESQL_LIBRARIES}" # Die gefundene .lib IMPORTED_LOCATION_RELEASE "${_POSTGRESQL_DLL_PATH}" # Die geratene .dll # Annahmen für Debug IMPORTED_IMPLIB_DEBUG "${_POSTGRESQL_LIB_DIR}/libpqd.lib" IMPORTED_LOCATION_DEBUG "${_POSTGRESQL_LIB_DIR}/libpqd.dll" ) else() # Linux/Unix Implementierung (.so oder .a) # --- Linux/Unix Implementierung (.so) --- set_target_properties(PostgreSQL::pq PROPERTIES IMPORTED_LOCATION_RELEASE "${POSTGRESQL_LIBRARIES}" IMPORTED_LOCATION_DEBUG "${POSTGRESQL_LIBRARIES}" ) # libpq benötigt oft math (m) und zlib (z) # libpq benötigt oft math (m) und zlib (z) auf Unix-Systemen set_property(TARGET PostgreSQL::pq APPEND PROPERTY INTERFACE_LINK_LIBRARIES "m;z") endif() endif() # Setze die CMAKE-Standardvariable für Legacy-Kompatibilität set(PostgreSQL_LIBRARIES "PostgreSQL::pq" CACHE STRING "The PostgreSQL client library target.")