Loading cmake/FindYAML.cmake +34 −32 Original line number Diff line number Diff line Loading @@ -4,62 +4,64 @@ # 1. Definieren der Pfadvariablen (Simulieren der Installationslogik) # -------------------------------------------------------------------------- # Setze YAML_ROOT basierend auf dem Pfad dieser Datei, um die Installation zu finden # CMAKE_CURRENT_LIST_DIR ist der Ordner, in dem diese Datei liegt. # Gehe zwei Ebenen hoch, um zum Installations-Präfix zu gelangen (z.B. /install/lib/cmake/yaml/ -> /install) if(DEFINED CMAKE_PREFIX_PATH) list(GET CMAKE_PREFIX_PATH 0 YAML_ROOT) # Nimm den ersten Pfad in der Liste list(GET CMAKE_PREFIX_PATH 0 YAML_ROOT) elseif(DEFINED CMAKE_INSTALL_PREFIX) set(YAML_ROOT "${CMAKE_INSTALL_PREFIX}") else() # Fallback zur Berechnung basierend auf dem Speicherort dieser Datei get_filename_component(YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE) endif() # Setze die Variablen, die von der installierten libyaml erwartet werden # Dies sind nur Beispiele; Sie müssen die tatsächlichen Pfade in Ihrer Umgebung prüfen! set(YAML_INCLUDE_DIR "${YAML_ROOT}/include") set(YAML_LIBRARY_DIR "${YAML_ROOT}/lib") # Stellen Sie sicher, dass die Variablen gesetzt sind, bevor Sie sie verwenden set(YAML_FOUND TRUE) # --- Definiere plattformspezifische Dateinamen --- if (WIN32) # Windows: .dll (Runtime) und .lib (Import Library) set(_YAML_DLL_NAME "yaml.dll") set(_YAML_IMPLIB_NAME "yaml.lib") else() # Linux/Unix: .so (Shared Object) set(_YAML_SO_NAME "libyaml.so") endif() # -------------------------------------------------------------------------- # 2. Erstellen des Namespaced IMPORTED Targets # -------------------------------------------------------------------------- # Definieren des Namensraum-Targets, wie in der CMakeLists.txt gewünscht if (NOT TARGET yaml::yaml) # Da es sich um eine C-Bibliothek handelt, definieren wir sie als Shared (DLL/SO) add_library(yaml::yaml SHARED IMPORTED) # --- WICHTIG: Schnittstellen-Include-Pfade definieren --- # Dadurch wird 'iniparser/iniparser.h' gefunden # WICHTIG: Setze explizit die Konfigurationen und Include-Pfade set_target_properties(yaml::yaml PROPERTIES IMPORTED_CONFIGURATIONS "Release;Debug" # Behebt den CMP0111 Warnung/Fehler INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}" ) # --- WICHTIG: Speicherorte der Binärdateien definieren --- # Die tatsächlichen Namen können je nach System (Windows/Linux) und Compiler variieren. # Hier wird das Standard-Muster für Windows-Installationen angenommen: # Release Konfiguration (für dynamisches Linken unter Windows) # --- Windows Implementierung (.dll/.lib) --- if (WIN32) set_target_properties(yaml::yaml PROPERTIES IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/yaml.dll" IMPORTED_IMPLIB_RELEASE "${YAML_LIBRARY_DIR}/yaml.lib" IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE "" # Keine weiteren Abhängigkeiten für die Schnittstelle # Release Konfiguration IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_DLL_NAME}" IMPORTED_IMPLIB_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_IMPLIB_NAME}" # Debug Konfiguration (angenommener Name mit '-d' Suffix) IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.dll" IMPORTED_IMPLIB_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.lib" ) # --- Linux/Unix Implementierung (.so) --- else() # Release Konfiguration (libyaml.so) set_target_properties(yaml::yaml PROPERTIES IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_SO_NAME}" ) # Optional: Debug Konfiguration if (EXISTS "${YAML_LIBRARY_DIR}/yaml-d.dll") # Debug Konfiguration: Setzen Sie einen Wert, um den 'missing location' Fehler zu vermeiden. # Im Zweifel den gleichen Pfad wie Release verwenden, wenn keine separate Debug-Datei existiert. set_target_properties(yaml::yaml PROPERTIES IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.dll" IMPORTED_IMPLIB_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.lib" IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "" IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/${_YAML_SO_NAME}" ) endif() # Optional: Setze die globale YAML_LIBRARIES Variable für Legacy-Code set(YAML_LIBRARIES "yaml::yaml" CACHE STRING "The YAML library target.") endif() Loading
cmake/FindYAML.cmake +34 −32 Original line number Diff line number Diff line Loading @@ -4,62 +4,64 @@ # 1. Definieren der Pfadvariablen (Simulieren der Installationslogik) # -------------------------------------------------------------------------- # Setze YAML_ROOT basierend auf dem Pfad dieser Datei, um die Installation zu finden # CMAKE_CURRENT_LIST_DIR ist der Ordner, in dem diese Datei liegt. # Gehe zwei Ebenen hoch, um zum Installations-Präfix zu gelangen (z.B. /install/lib/cmake/yaml/ -> /install) if(DEFINED CMAKE_PREFIX_PATH) list(GET CMAKE_PREFIX_PATH 0 YAML_ROOT) # Nimm den ersten Pfad in der Liste list(GET CMAKE_PREFIX_PATH 0 YAML_ROOT) elseif(DEFINED CMAKE_INSTALL_PREFIX) set(YAML_ROOT "${CMAKE_INSTALL_PREFIX}") else() # Fallback zur Berechnung basierend auf dem Speicherort dieser Datei get_filename_component(YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE) endif() # Setze die Variablen, die von der installierten libyaml erwartet werden # Dies sind nur Beispiele; Sie müssen die tatsächlichen Pfade in Ihrer Umgebung prüfen! set(YAML_INCLUDE_DIR "${YAML_ROOT}/include") set(YAML_LIBRARY_DIR "${YAML_ROOT}/lib") # Stellen Sie sicher, dass die Variablen gesetzt sind, bevor Sie sie verwenden set(YAML_FOUND TRUE) # --- Definiere plattformspezifische Dateinamen --- if (WIN32) # Windows: .dll (Runtime) und .lib (Import Library) set(_YAML_DLL_NAME "yaml.dll") set(_YAML_IMPLIB_NAME "yaml.lib") else() # Linux/Unix: .so (Shared Object) set(_YAML_SO_NAME "libyaml.so") endif() # -------------------------------------------------------------------------- # 2. Erstellen des Namespaced IMPORTED Targets # -------------------------------------------------------------------------- # Definieren des Namensraum-Targets, wie in der CMakeLists.txt gewünscht if (NOT TARGET yaml::yaml) # Da es sich um eine C-Bibliothek handelt, definieren wir sie als Shared (DLL/SO) add_library(yaml::yaml SHARED IMPORTED) # --- WICHTIG: Schnittstellen-Include-Pfade definieren --- # Dadurch wird 'iniparser/iniparser.h' gefunden # WICHTIG: Setze explizit die Konfigurationen und Include-Pfade set_target_properties(yaml::yaml PROPERTIES IMPORTED_CONFIGURATIONS "Release;Debug" # Behebt den CMP0111 Warnung/Fehler INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}" ) # --- WICHTIG: Speicherorte der Binärdateien definieren --- # Die tatsächlichen Namen können je nach System (Windows/Linux) und Compiler variieren. # Hier wird das Standard-Muster für Windows-Installationen angenommen: # Release Konfiguration (für dynamisches Linken unter Windows) # --- Windows Implementierung (.dll/.lib) --- if (WIN32) set_target_properties(yaml::yaml PROPERTIES IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/yaml.dll" IMPORTED_IMPLIB_RELEASE "${YAML_LIBRARY_DIR}/yaml.lib" IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE "" # Keine weiteren Abhängigkeiten für die Schnittstelle # Release Konfiguration IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_DLL_NAME}" IMPORTED_IMPLIB_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_IMPLIB_NAME}" # Debug Konfiguration (angenommener Name mit '-d' Suffix) IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.dll" IMPORTED_IMPLIB_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.lib" ) # --- Linux/Unix Implementierung (.so) --- else() # Release Konfiguration (libyaml.so) set_target_properties(yaml::yaml PROPERTIES IMPORTED_LOCATION_RELEASE "${YAML_LIBRARY_DIR}/${_YAML_SO_NAME}" ) # Optional: Debug Konfiguration if (EXISTS "${YAML_LIBRARY_DIR}/yaml-d.dll") # Debug Konfiguration: Setzen Sie einen Wert, um den 'missing location' Fehler zu vermeiden. # Im Zweifel den gleichen Pfad wie Release verwenden, wenn keine separate Debug-Datei existiert. set_target_properties(yaml::yaml PROPERTIES IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.dll" IMPORTED_IMPLIB_DEBUG "${YAML_LIBRARY_DIR}/yaml-d.lib" IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "" IMPORTED_LOCATION_DEBUG "${YAML_LIBRARY_DIR}/${_YAML_SO_NAME}" ) endif() # Optional: Setze die globale YAML_LIBRARIES Variable für Legacy-Code set(YAML_LIBRARIES "yaml::yaml" CACHE STRING "The YAML library target.") endif()