2016-11-10 7 views
1

Как указать 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, а не главный проект верхнего уровня.

+0

Я только заметил, что может возникнуть проблема с моей '$ {CMAKE_INSTALL_PREFIX}', потому что она указывает на каталог моего проекта CMake на верхнем уровне. Как указать его на установочный каталог ExternalProject? – BlazePascal

+1

Вы объявляете переменную 'SFML_CMALE_ARGS', поскольку список содержит несколько элементов. Но при разыменовании этой переменной вы заключите ее в * двойные кавычки *, поэтому она рассматривается как ** однозначная ** переменная. Выбросьте двойные кавычки, и параметры будут переданы правильно. – Tsyvarev

+0

@ Цыварев Пробовал удалять кавычки, но я получил то же сообщение об ошибке. RPATH не выглядит таким же, как в $ {SFML_CMAKE_ARGS} – BlazePascal

ответ

1

Я понял (спасибо комментариям Цыварева). Внешне построенный проект, который я использовал, настроил его собственный RPATH. Поэтому строка, которую я нашел в сообщении об ошибке, была RPATH, а не RPATH, которую я установил в своем проекте «верхнего уровня».

Похоже, что установка RPATH внешнего проекта не может переопределить внутренний RPATH внешнего проекта (если он использует CMAKE).