Я хотел бы автоматически добавить путь к библиотекам во время соединения с RPATH.Прочитав немного, я подумал, что CMAKE_INSTALL_RPATH_USE_LINK_PATH
должен сделать эту работу.К сожалению, следующее MWE не выполняет эту работу:
cmake_minimum_required(VERSION 3.9)
cmake_policy(SET CMP0060 NEW)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
# set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
# set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
find_package(Boost COMPONENTS serialization REQUIRED)
# Setting CMAKE_INSTALL_RPATH explicitly works
# set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${Boost_LIBRARY_DIRS}")
add_executable(app main.cxx)
target_include_directories( app
PUBLIC ${Boost_INCLUDE_DIR})
target_link_libraries( app
PUBLIC Boost::serialization)
install(TARGETS app DESTINATION bin)
Вывод readelf -d install/bin/app
для приведенного выше примера показывает зависимости, но без RPATH:
0x0000000000000001 (NEEDED) Shared library: [libboost_serialization.so.1.65.1]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
Комментированные строкинекоторые вещи, которые я пробовал до сих пор.Установка CMAKE_INSTALL_RPATH
явно работает.Но установка CMAKE_INSTALL_RPATH_USE_LINK_PATH
, похоже, не имеет никакого эффекта.Это касается как двоичных файлов, так и сборки и установленного.
Я неправильно понимаю, что делает CMAKE_INSTALL_RPATH_USE_LINK_PATH
, или кто-то может обнаружить ошибку?CMake 3.13, CentOS 7