Я пытаюсь настроить проект, в котором мой репозиторий импортирует все зависимости в качестве подмодулей git для легкой разработки. Мои коллеги могут просто клонировать репо, git submodule update --init --recursive
, cmake .
и make
и иметь полностью работоспособную среду разработки. Структура каталога установки как SUPERBUILD с CMakeLists.txt
на верхнем уровне, который строит все подмодулей с помощью ExternalProject_Add
, в результате чего в следующем составе:Настройка RPATH для внешних проектов?
root
- CMakeLists.txt (superbuild)
- git_submodule_1
- git_submodule_2
- usr
- lib
- include
- my_project
- CMakeLists.txt (project)
CMakeLists.txt
выглядит примерно так:
SET (INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/usr)
# Install git_submodule_1 with ${INSTALL_PREFIX} as a prefix
ExternalProject_Add(...)
# Install git_submodule_2 with ${INSTALL_PREFIX} as a prefix
ExternalProject_Add(...)
ExternalProject_Add(
MyProject
PREFIX ${CMAKE_SOURCE_DIR}/my_project
DEPENDS ExternalProject_git_submodule_1 ExternalProject_git_submodule_2
SOURCE_DIR ${CMAKE_SOURCE_DIR}/my_project
CMAKE_ARGS
-DCMAKE_LIBRARY_PATH:string=${INSTALL_PREFIX}/lib
-DCMAKE_PROGRAM_PATH:string=${INSTALL_PREFIX}/bin
-DCMAKE_INCLUDE_PATH:string=${INSTALL_PREFIX}/include
# etc, nothing nonstandard here
)
Процесс сборки отлично работает. I make
на верхнем уровне, зависимости установлены в usr
, I cd
в my_project
, я выполняю свою работу, все встроенные общие библиотеки найдены и связаны, я счастлив.
Однако, когда я запускаю исполняемый файл на OS X, встроенный внутри my_project
, я обнаружил, что динамические библиотеки, помещенные в каталог usr/lib
, не найдены. Похоже, что CMake устанавливает только RPATH
для библиотек , созданных в каталоге проекта, который в этом случае равен my_project
.
Можно ли добавить пользовательское место установки в каталог RPATH
для библиотек времени исполнения и исполняемых файлов?
Несколько замечаний:
- Эта проблема появляется только влиять на OS X. Linux не обнаруживает эти проблемы вообще.
- Установка
DYLD_LIBRARY_PATH
для включения пользовательского места установки. Однако это добавляет дополнительный шаг к настройке, и это раздражает, когда я пытаюсь отлаживать проблемы установки. - Также работает установка
DYLD_FALLBACK_LIBRARY_PATH
, хотя это также не очень хорошо, потому что она также добавляет дополнительный набор, и пользователям доморощенного не понравится этот вариант.
Не было бы у этого недостатка предпочтительнее настраивать библиотеки по системным? Я пытаюсь спроектировать проект, чтобы предоставить необходимые библиотеки для разработки, а затем полностью освобожден от необходимости после его установки. – Alex