Loading CMakeLists.txt +1 −1 Original line number Diff line number Diff line cmake_minimum_required(VERSION 3.10) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" PARENT_SCOPE) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") project(libconfplus) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) Loading cmake/FindYAML.cmake +51 −54 Original line number Diff line number Diff line # FindYAMLCompat.cmake # Ensures a modern imported target YAML::YAML exists. # Tries config packages (yaml / LibYAML), then pkg-config, then manual. # 1) Try config packages (vcpkg/Conan/etc.) set(_yaml_config_found FALSE) find_package(yaml CONFIG QUIET) if(yaml_FOUND) if(TARGET yaml::yaml AND NOT TARGET YAML::YAML) add_library(YAML::YAML ALIAS yaml::yaml) endif() set(_yaml_config_found TRUE) endif() # CMake module to search for the C library libyaml # # If the library is found, then YAML_FOUND is set to TRUE, # and following variables are set: # YAML_INCLUDE_DIR # YAML_LIBRARIES if(NOT _yaml_config_found) find_package(LibYAML CONFIG QUIET) if(LibYAML_FOUND) if(TARGET LibYAML::LibYAML AND NOT TARGET YAML::YAML) add_library(YAML::YAML ALIAS LibYAML::LibYAML) endif() set(_yaml_config_found TRUE) endif() endif() # 1. Include directory search find_path(YAML_INCLUDE_DIR NAMES yaml.h) if(NOT TARGET YAML::YAML) # 2) Try pkg-config find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_check_modules(LIBYAML QUIET yaml-0.1) endif() # 2. Configure library search for static libraries # Speichern Sie die aktuellen Such-Suffixe set(ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) # 3) Manual fallback if pkg-config failed or incomplete if(NOT LIBYAML_FOUND) find_path(LIBYAML_INCLUDE_DIR yaml.h HINTS $ENV{LIBYAML_ROOT} ${CMAKE_PREFIX_PATH} PATH_SUFFIXES include ) find_library(LIBYAML_LIBRARY NAMES yaml libyaml HINTS $ENV{LIBYAML_ROOT} ${CMAKE_PREFIX_PATH} PATH_SUFFIXES lib ) if(NOT LIBYAML_INCLUDE_DIR OR NOT LIBYAML_LIBRARY) message(FATAL_ERROR "libyaml not found. Set LIBYAML_ROOT or install it (vcpkg: 'libyaml').") # Stellen Sie sicher, dass wir nach den statischen Suffixen suchen if (WIN32) # Unter Windows suchen wir explizit nach .lib (statisch) vor .dll (dynamisch) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else() # Unter Unix/Linux/macOS ist .a das statische Standard-Suffix set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif() add_library(YAML::YAML UNKNOWN IMPORTED) set_target_properties(YAML::YAML PROPERTIES IMPORTED_LOCATION "${LIBYAML_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIR}" # 3. Search for the static library find_library(YAML_LIBRARIES NAMES yaml libyaml) # 4. Set Suffixes back to original set(CMAKE_FIND_LIBRARY_SUFFIXES ${ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES}) # 5. Handle standard arguments include(FindPackageHandleStandardArgs) find_package_handle_standard_args(YAML DEFAULT_MSG YAML_LIBRARIES YAML_INCLUDE_DIR) mark_as_advanced(YAML_INCLUDE_DIR YAML_LIBRARIES) # 6. Create IMPORTED Target for modern CMake usage # WICHTIG: Verwenden Sie 'yaml::yaml', um den Anforderungen von libconfplus zu entsprechen. if (YAML_FOUND AND NOT TARGET yaml::yaml) # Target mit dem korrekten Namen erstellen add_library(yaml::yaml UNKNOWN IMPORTED) set_target_properties(yaml::yaml PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}" IMPORTED_LOCATION "${YAML_LIBRARIES}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) else() # Use pkg-config result to create a modern target add_library(YAML::YAML INTERFACE IMPORTED) set_target_properties(YAML::YAML PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${LIBYAML_LIBRARIES}" # Wenn es eine statische Bibliothek ist, verwenden wir IMPORTED_LINK_INTERFACE_LIBRARIES # Das Ziel benötigt KEINE zusätzlichen Bibliotheken (wie pthread oder ws2_32), # da libyaml diese nicht exponiert. if (YAML_LIBRARIES MATCHES "\\.a$|\\.lib$") set_target_properties(yaml::yaml PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES "" ) endif() endif() No newline at end of file Loading
CMakeLists.txt +1 −1 Original line number Diff line number Diff line cmake_minimum_required(VERSION 3.10) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" PARENT_SCOPE) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") project(libconfplus) set(WINDOWS_EXPORT_ALL_SYMBOLS ON) Loading
cmake/FindYAML.cmake +51 −54 Original line number Diff line number Diff line # FindYAMLCompat.cmake # Ensures a modern imported target YAML::YAML exists. # Tries config packages (yaml / LibYAML), then pkg-config, then manual. # 1) Try config packages (vcpkg/Conan/etc.) set(_yaml_config_found FALSE) find_package(yaml CONFIG QUIET) if(yaml_FOUND) if(TARGET yaml::yaml AND NOT TARGET YAML::YAML) add_library(YAML::YAML ALIAS yaml::yaml) endif() set(_yaml_config_found TRUE) endif() # CMake module to search for the C library libyaml # # If the library is found, then YAML_FOUND is set to TRUE, # and following variables are set: # YAML_INCLUDE_DIR # YAML_LIBRARIES if(NOT _yaml_config_found) find_package(LibYAML CONFIG QUIET) if(LibYAML_FOUND) if(TARGET LibYAML::LibYAML AND NOT TARGET YAML::YAML) add_library(YAML::YAML ALIAS LibYAML::LibYAML) endif() set(_yaml_config_found TRUE) endif() endif() # 1. Include directory search find_path(YAML_INCLUDE_DIR NAMES yaml.h) if(NOT TARGET YAML::YAML) # 2) Try pkg-config find_package(PkgConfig QUIET) if(PkgConfig_FOUND) pkg_check_modules(LIBYAML QUIET yaml-0.1) endif() # 2. Configure library search for static libraries # Speichern Sie die aktuellen Such-Suffixe set(ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) # 3) Manual fallback if pkg-config failed or incomplete if(NOT LIBYAML_FOUND) find_path(LIBYAML_INCLUDE_DIR yaml.h HINTS $ENV{LIBYAML_ROOT} ${CMAKE_PREFIX_PATH} PATH_SUFFIXES include ) find_library(LIBYAML_LIBRARY NAMES yaml libyaml HINTS $ENV{LIBYAML_ROOT} ${CMAKE_PREFIX_PATH} PATH_SUFFIXES lib ) if(NOT LIBYAML_INCLUDE_DIR OR NOT LIBYAML_LIBRARY) message(FATAL_ERROR "libyaml not found. Set LIBYAML_ROOT or install it (vcpkg: 'libyaml').") # Stellen Sie sicher, dass wir nach den statischen Suffixen suchen if (WIN32) # Unter Windows suchen wir explizit nach .lib (statisch) vor .dll (dynamisch) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) else() # Unter Unix/Linux/macOS ist .a das statische Standard-Suffix set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif() add_library(YAML::YAML UNKNOWN IMPORTED) set_target_properties(YAML::YAML PROPERTIES IMPORTED_LOCATION "${LIBYAML_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIR}" # 3. Search for the static library find_library(YAML_LIBRARIES NAMES yaml libyaml) # 4. Set Suffixes back to original set(CMAKE_FIND_LIBRARY_SUFFIXES ${ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES}) # 5. Handle standard arguments include(FindPackageHandleStandardArgs) find_package_handle_standard_args(YAML DEFAULT_MSG YAML_LIBRARIES YAML_INCLUDE_DIR) mark_as_advanced(YAML_INCLUDE_DIR YAML_LIBRARIES) # 6. Create IMPORTED Target for modern CMake usage # WICHTIG: Verwenden Sie 'yaml::yaml', um den Anforderungen von libconfplus zu entsprechen. if (YAML_FOUND AND NOT TARGET yaml::yaml) # Target mit dem korrekten Namen erstellen add_library(yaml::yaml UNKNOWN IMPORTED) set_target_properties(yaml::yaml PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}" IMPORTED_LOCATION "${YAML_LIBRARIES}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) else() # Use pkg-config result to create a modern target add_library(YAML::YAML INTERFACE IMPORTED) set_target_properties(YAML::YAML PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBYAML_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${LIBYAML_LIBRARIES}" # Wenn es eine statische Bibliothek ist, verwenden wir IMPORTED_LINK_INTERFACE_LIBRARIES # Das Ziel benötigt KEINE zusätzlichen Bibliotheken (wie pthread oder ws2_32), # da libyaml diese nicht exponiert. if (YAML_LIBRARIES MATCHES "\\.a$|\\.lib$") set_target_properties(yaml::yaml PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES "" ) endif() endif() No newline at end of file