update
This commit is contained in:
parent
5eb11f233f
commit
2831959056
|
|
@ -31,88 +31,24 @@ if(BUILDING_WITH_CATKIN)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
## System dependencies
|
## System dependencies
|
||||||
# Find yaml-cpp shared library first, prioritizing system installation over /usr/local
|
# Find yaml-cpp library
|
||||||
# This avoids using static library from /usr/local/lib
|
find_package(yaml-cpp REQUIRED)
|
||||||
|
|
||||||
# First, try pkg-config to get the correct library path
|
# Use target if available (modern CMake)
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
if(PkgConfig_FOUND)
|
|
||||||
pkg_check_modules(YAMLCPP_PKG yaml-cpp QUIET)
|
|
||||||
if(YAMLCPP_PKG_FOUND AND YAMLCPP_PKG_LIBRARIES)
|
|
||||||
set(YAML_CPP_TARGET ${YAMLCPP_PKG_LIBRARIES})
|
|
||||||
message(STATUS "Using yaml-cpp from pkg-config: ${YAML_CPP_TARGET}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# If pkg-config didn't work, find shared library directly, prioritizing /usr/lib
|
|
||||||
if(NOT YAML_CPP_TARGET)
|
|
||||||
# First try system paths (avoid /usr/local which may have static library)
|
|
||||||
find_library(YAML_CPP_SHARED_LIB
|
|
||||||
NAMES yaml-cpp
|
|
||||||
PATHS /usr/lib
|
|
||||||
PATH_SUFFIXES x86_64-linux-gnu
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
if(YAML_CPP_SHARED_LIB AND EXISTS "${YAML_CPP_SHARED_LIB}")
|
|
||||||
# Verify it's actually a shared library (not a symlink to static)
|
|
||||||
get_filename_component(YAML_CPP_REAL_LIB "${YAML_CPP_SHARED_LIB}" REALPATH)
|
|
||||||
if(YAML_CPP_REAL_LIB MATCHES "\\.so")
|
|
||||||
set(YAML_CPP_TARGET ${YAML_CPP_SHARED_LIB})
|
|
||||||
message(STATUS "Found yaml-cpp shared library in /usr/lib: ${YAML_CPP_SHARED_LIB}")
|
|
||||||
# Also find include directory
|
|
||||||
find_path(YAML_CPP_INCLUDE_DIR
|
|
||||||
NAMES yaml-cpp/yaml.h
|
|
||||||
PATHS /usr/include
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
if(YAML_CPP_INCLUDE_DIR)
|
|
||||||
message(STATUS "Found yaml-cpp include directory: ${YAML_CPP_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Now use find_package, but temporarily exclude /usr/local to avoid static library
|
|
||||||
set(CMAKE_PREFIX_PATH_SAVED ${CMAKE_PREFIX_PATH})
|
|
||||||
list(REMOVE_ITEM CMAKE_PREFIX_PATH "/usr/local")
|
|
||||||
find_package(yaml-cpp QUIET)
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH_SAVED})
|
|
||||||
|
|
||||||
# Use target if available and we haven't found a library yet
|
|
||||||
if(NOT YAML_CPP_TARGET)
|
|
||||||
if(TARGET yaml-cpp::yaml-cpp)
|
if(TARGET yaml-cpp::yaml-cpp)
|
||||||
set(YAML_CPP_TARGET yaml-cpp::yaml-cpp)
|
set(YAML_CPP_TARGET yaml-cpp::yaml-cpp)
|
||||||
message(STATUS "Using yaml-cpp target: yaml-cpp::yaml-cpp")
|
message(STATUS "Using yaml-cpp target: yaml-cpp::yaml-cpp")
|
||||||
elseif(TARGET yaml-cpp)
|
elseif(TARGET yaml-cpp)
|
||||||
set(YAML_CPP_TARGET yaml-cpp)
|
set(YAML_CPP_TARGET yaml-cpp)
|
||||||
message(STATUS "Using yaml-cpp target: yaml-cpp")
|
message(STATUS "Using yaml-cpp target: yaml-cpp")
|
||||||
|
elseif(yaml-cpp_LIBRARIES)
|
||||||
|
# Fallback to library variable if target not available
|
||||||
|
set(YAML_CPP_TARGET ${yaml-cpp_LIBRARIES})
|
||||||
|
message(STATUS "Using yaml-cpp library: ${YAML_CPP_TARGET}")
|
||||||
else()
|
else()
|
||||||
# Last resort: try to find any library, but check if it's static
|
# Last resort: use library name
|
||||||
find_library(YAML_CPP_ANY_LIB
|
|
||||||
NAMES yaml-cpp
|
|
||||||
PATHS /usr/lib /usr/local/lib /lib
|
|
||||||
PATH_SUFFIXES x86_64-linux-gnu
|
|
||||||
)
|
|
||||||
|
|
||||||
if(YAML_CPP_ANY_LIB)
|
|
||||||
if(YAML_CPP_ANY_LIB MATCHES "\\.a$")
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"yaml-cpp static library found at: ${YAML_CPP_ANY_LIB}\n"
|
|
||||||
"This cannot be linked into a shared library.\n"
|
|
||||||
"Solution: Remove static library or use system shared library:\n"
|
|
||||||
" sudo rm /usr/local/lib/libyaml-cpp.a\n"
|
|
||||||
"Or ensure /usr/lib/x86_64-linux-gnu/libyaml-cpp.so is found first."
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
set(YAML_CPP_TARGET ${YAML_CPP_ANY_LIB})
|
|
||||||
message(STATUS "Found yaml-cpp library: ${YAML_CPP_TARGET}")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
set(YAML_CPP_TARGET yaml-cpp)
|
set(YAML_CPP_TARGET yaml-cpp)
|
||||||
message(WARNING "yaml-cpp library not found. Using library name 'yaml-cpp'")
|
message(STATUS "Using yaml-cpp library name: yaml-cpp")
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(console_bridge REQUIRED)
|
find_package(console_bridge REQUIRED)
|
||||||
|
|
@ -179,16 +115,6 @@ target_link_libraries(${PROJECT_NAME}
|
||||||
dl # Required for dladdr() function used in plugin_loader_helper.cpp
|
dl # Required for dladdr() function used in plugin_loader_helper.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Check if we're using static library and warn user
|
|
||||||
if(YAML_CPP_TARGET MATCHES "\\.a$" OR YAML_CPP_TARGET MATCHES "libyaml-cpp\\.a")
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"yaml-cpp static library detected at: ${YAML_CPP_TARGET}\n"
|
|
||||||
"Static libraries cannot be linked into shared libraries without -fPIC.\n"
|
|
||||||
"Solution: Install shared library version:\n"
|
|
||||||
" sudo apt-get install libyaml-cpp-dev\n"
|
|
||||||
"Or rebuild yaml-cpp with -fPIC flag."
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
## Add cmake target dependencies
|
## Add cmake target dependencies
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user