Ответ 1
Вы должны посмотреть на команду set_target_properties и свойство BUILD_WITH_INSTALL_RPATH
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_target_properties
Я использую 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, поэтому я не могу добавить местоположение в стандартный путь поиска компоновщика.
Кто-нибудь знает, как я могу поддерживать пути компоновки времени разработки при установке или, по крайней мере, настройке, какие пути добавляются в среду выполнения?
Приветствия
Вы должны посмотреть на команду set_target_properties и свойство BUILD_WITH_INSTALL_RPATH
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_target_properties
Примечание. Если вы не хотите изменять сами скрипты cmake
, устанавливая свойство вокруг, вы можете запустить cmake
с директивой, требующей не удалять путь выполнения:
См. "Переменные, которые управляют сборкой", с переменной: "CMAKE_SKIP_RPATH
"
Если значение true, не добавляйте информацию о времени выполнения.
Если для этого параметра установлено значение ИСТИНА, информация rpath не добавляется в скомпилированные исполняемые файлы.
По умолчанию добавляется информация о rpath, если платформа поддерживает ее. Это позволяет легко работать из дерева сборки.
Чтобы опуститьRPATH
на этапе установки, но не на этапе сборки, используйтеCMAKE_SKIP_INSTALL_RPATH
вместо этого.
Если поставки уже содержат правильный путь выполнения, эта директива избежит cmake
для внесения любых изменений в текущий путь выполнения, включенный в указанные поставки.
cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake
Это работает для 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"