Подтвердить что ты не робот

Создание двоичного файла с CMake удаляет путь выполнения

Я использую CMake для создания программы на Linux. Программа успешно компилируется и запускается из каталога создания проекта. Программа связана с пользовательской библиотекой в ​​каталоге ${HOME}/build/lib

У меня есть этап установки с:

install(TARGETS ProgName RUNTIME DESTINATION bin)

Когда я запускаю make install, программа попадает в нужное место, но установщик cmake удаляет путь выполнения из двоичного файла.

-- Install configuration: "Debug"
-- Installing: *binary name*
-- Removed runtime path from "*binary name*"

Я читал статьи в Интернете, обсуждая неправильное использование переменной LD_LIBRARY_PATH, поэтому, если это возможно, я хочу, чтобы мои ограничения были ограничены местами системной библиотеки. Я не sysadmin, поэтому я не могу добавить местоположение в стандартный путь поиска компоновщика.

Кто-нибудь знает, как я могу поддерживать пути компоновки времени разработки при установке или, по крайней мере, настройке, какие пути добавляются в среду выполнения?

Приветствия

4b9b3361

Ответ 2

Примечание. Если вы не хотите изменять сами скрипты cmake, устанавливая свойство вокруг, вы можете запустить cmake с директивой, требующей не удалять путь выполнения:
См. "Переменные, которые управляют сборкой", с переменной: "CMAKE_SKIP_RPATH"

Если значение true, не добавляйте информацию о времени выполнения.

Если для этого параметра установлено значение ИСТИНА, информация rpath не добавляется в скомпилированные исполняемые файлы.
По умолчанию добавляется информация о rpath, если платформа поддерживает ее. Это позволяет легко работать из дерева сборки.
Чтобы опустить RPATH на этапе установки, но не на этапе сборки, используйте CMAKE_SKIP_INSTALL_RPATH вместо этого.

Если поставки уже содержат правильный путь выполнения, эта директива избежит cmake для внесения любых изменений в текущий путь выполнения, включенный в указанные поставки.

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake

Ответ 3

Это работает для CMake 2.8

 set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)

где foo - цель, которую вы определили ранее:

 project(foo)
 add_executable(foo ...)
  ...
 install(TARGETS foo DESTINATION bin)
  ...

Перед

% sudo make install
Install the project...
-- Install configuration: ""
-- Installing: /opt/mystuff/bin/foo
-- Removed runtime path from "/opt/mystuff/bin/foo"

После

% sudo make install
Install the project...
-- Install configuration: ""
-- Installing: /opt/mystuff/bin/foo
-- Set runtime path of "/opt/mystuff/bin/foo" to "/opt/zzyzx/lib:/opt/bar/lib/x86_64"