CMAKE_INSTALL_RPATH_USE_LINK_PATH без какого-либо эффекта - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы автоматически добавить путь к библиотекам во время соединения с 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

1 Ответ

0 голосов
/ 05 февраля 2019

Я до сих пор точно не понимаю, что происходит, но здесь и здесь Я обнаружил намек, что переменная окружения LIBRARY_PATH (вероятно, также CPATH и CPLUS_INCLUDE_PATH)влияет на то, какие каталоги добавляются в RPATH, если установлено CMAKE_INSTALL_RPATH_USE_LINK_PATH.Эти переменные были установлены в моем случае с помощью easybuild.Я предполагаю, что каталоги, предоставленные в LIBRARY_PATH во время компиляции / ссылки, не добавляются к RPATH.Отключение LIBRARY_PATH решило мою проблему.

...