2016-10-17 4 views
1

После сборки с 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 для встроенных файлов, как в до того, запустить установку. Я не настроил установку должным образом (добавленные цели установки и т. Д.). Нужно ли мне заглядывать в эту часть, чтобы это работало?

ответ

0

Если вы не можете найти ответы на Google, часто бывает так, что ответ очевиден. Это, кажется, работает просто отлично:

set_target_properties(foo PROPERTIES 
    BUILD_WITH_INSTALL_RPATH TRUE 
    INSTALL_RPATH_USE_LINK_PATH TRUE 
    INSTALL_RPATH "\$ORIGIN/../lib:${INSTALL_RPATH}") 

В моей системе (и CMake 3.6.1), это кажется INSTALL_RPATH начинается с двоеточия, но я бы не рассчитывал на это. Кроме того, поскольку я, очевидно, устанавливаю глобальныйINSTALL_RPATH здесь, он может быть указанным (я еще не проверял).

Смежные вопросы