После сборки с CMake на Linux (но перед установкой) все связанные библиотеки добавляются в RPATH окончательного исполняемого файла.Подготовка к RPATH
Однако, я хотел бы prepend$ORIGIN/../lib:
к этому RPATH.
До сих пор я только был в состоянии заменить на RPATH, и это не то, что я хочу: Я хочу ld.so
сначала посмотреть в ../lib
. Это то, что я в настоящее время сделать:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:...")
В то время как это работает, не хватает некоторых дополнительных сторонних библиотек, которые не являются частью моего построения дерева, и которые не находятся в системных каталогах.
Выполнение chrpath -l foo
дает мне то же самое INSTALL_RPATH
выше. Если я не задаю эти свойства, я получаю длинный список местоположений DSO, например. RPATH=/bar/baz/:/quux/
и т. Д. (Тот, который я хотел бы добавить к).
Я попытался с помощью get_property(_existing_rpath foo INSTALL_RPATH)
, но это дает мне пустую строку
Я прочитал намеки на https://cmake.org/Wiki/CMake_RPATH_handling и заметил под «CMake Bugs», что
По крайней мере, на CMake 2.6. 4 RHEL5, man cmakecommands для INSTALL_RPATH_USE_LINK_PATH делает вид, что этот параметр будет append путь ссылки на любой контент CMAKE_INSTALL_RPATH, указанный указанным. Однако на этой версии, включив INSTALL_RPATH_USE_LINK_PATH, будет заменить.
Ну, не так уверен в этом больше: просто проверить это на CMake 2.8.0, а теперь на как версии он делает список правильных изменений в cmake_install.cmake. Возможно, эта ошибка произошла из-за ранее не , выполняющего установку цели(), или, возможно, из-за некоторых других изменений в переменных, связанных с CMake RPATH.
Кстати, я заинтересован только в получении рабочего RPATH для встроенных файлов, как в до того, запустить установку. Я не настроил установку должным образом (добавленные цели установки и т. Д.). Нужно ли мне заглядывать в эту часть, чтобы это работало?