Создание двоичного файла с CMake удаляет путь выполнения - PullRequest
21 голосов
/ 28 июля 2010

Я использую 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, поэтому я хотел бы ограничить использование моей системы системной библиотекой.места, если это возможно.Я не являюсь системным администратором, поэтому не могу добавить местоположение в путь поиска компоновщика по умолчанию.

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

Приветствия

Ответы [ 3 ]

11 голосов
/ 28 июля 2010

Вы должны взглянуть на команду set_target_properties и свойство BUILD_WITH_INSTALL_RPATH

http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_target_properties

10 голосов
/ 17 июня 2012

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

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

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

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

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake
0 голосов
/ 29 июля 2014

Это работает для 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"

* После +1011 *

% 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"
...