2016-11-10 54 views
1

如何爲通過ExternalProject_Add()宏在CMake(使用3.0.0)中構建的項目指定RPATH?爲外部構建的CMAKE項目指定RPATH

作爲參考,假設我的ExternalProject是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 

最後,這個「/家/亨德里克斯/回購/項目/ 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

@Tsyvarev試圖刪除引號,但我得到了同樣的錯誤信息。 RPATH似乎與$ {SFML_CMAKE_ARGS}中的那個不一樣。 – BlazePascal

回答

1

我想通了(謝謝Tsyvarev的評論)。我使用的外部建立的項目設置了它自己的RPATH。所以我在錯誤信息中找到的字符串是RPATH,而不是我在「頂級」項目中設置的任何RPATH。

看來,設置外部項目的RPATH不能覆蓋該外部項目的內部設置的RPATH(如果它使用CMAKE)。