为外部构建的CMAKE项目指定RPATH

时间:2016-11-10 22:02:35

标签: c++ cmake sfml

如何通过ExternalProject_Add()宏为CMake(使用3.0.0)外部构建的项目指定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

最后,这个" / home / hendrix / repo / project / build / ext_deps / ext_sfml-build / lib"是我试图修改的那一行。它似乎是我的$ {CMAKE_INSTALL_RPATH}变量的值,但包含我的ext-dep项目的安装前缀而不是顶级主项目。

1 个答案:

答案 0 :(得分:1)

我想通了(感谢Tsyvarev的评论)。我正在使用的外部构建的项目设置了它自己的RPATH。所以我在错误消息中找到的字符串是RPATH,而不是我在“顶级”项目中设置的任何RPATH。

似乎设置外部项目的RPATH不能覆盖该外部项目的内部设置RPATH(如果它正在使用CMAKE)。