Как указать RPATH для проекта, который был создан извне в CMake (с использованием 3.0.0) через макрос ExternalProject_Add()
?Укажите RPATH для проекта CMAKE, созданного извне
Для справки, допустим, мой внешний проект SFML. Мой внешний вызов проекта выглядит следующим образом:
set(SFML_INSTALL_PATH "${CMAKE_CURRENT_BINARY_DIR}/ext-deps/ext-sfml-build")
set(SFML_RPATH "${SFML_INSTALL_PATH}/src/lib")
set(SFML_CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=Release -DUSE_STATIC_LIBS:BOOL=true
-DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PATH}
-DCMAKE_INSTALL_RPATH:PATH=${SFML_RPATH})
ExternalProject_Add(ext-sfml
GIT_REPOSITORY "${SFML_REPO}"
GIT_TAG "${SFML_TAG}"
URL SFML_URL
URL_HASH 256=${SFML_SHA256}
CMAKE_ARGS "${SFML_CMAKE_ARGS}"
TMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EXT_DEPS_PREFIX}/ext-sfml-tmp"
STAMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EXT_DEPS_PREFIX}/ext-sfml-stamp"
INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EXT_DEPS_PREFIX}/ext-sfml-build"
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EXT_DEPS_PREFIX}/ext-sfml"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EXT_DEPS_PREFIX}/ext-sfml-build"
TEST_COMMAND "")
Команда Я получаю ошибку, когда я запускаю шаг сборки (конфигурация отлично) является
Make Error at src/cmake_install.cmake:45 (file):
file RPATH_CHANGE could not write new RPATH:
/home/hendrix/repo/project/build/ext_deps/ext_sfml-build/lib
to the file:
/home/hendrix/repo/project/build/ext_deps/ext_sfml-build/bin/exe
Наконец, это «/ главная/Hendrix/репо/проект/build/ext_deps/ext_sfml-build/lib "- это строка, которую я пытаюсь изменить. Похоже, что это значение моей переменной $ {CMAKE_INSTALL_RPATH}, но содержит префикс установки моего проекта ext-dep, а не главный проект верхнего уровня.
Я только заметил, что может возникнуть проблема с моей '$ {CMAKE_INSTALL_PREFIX}', потому что она указывает на каталог моего проекта CMake на верхнем уровне. Как указать его на установочный каталог ExternalProject? – BlazePascal
Вы объявляете переменную 'SFML_CMALE_ARGS', поскольку список содержит несколько элементов. Но при разыменовании этой переменной вы заключите ее в * двойные кавычки *, поэтому она рассматривается как ** однозначная ** переменная. Выбросьте двойные кавычки, и параметры будут переданы правильно. – Tsyvarev
@ Цыварев Пробовал удалять кавычки, но я получил то же сообщение об ошибке. RPATH не выглядит таким же, как в $ {SFML_CMAKE_ARGS} – BlazePascal