如何通过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项目的安装前缀而不是顶级主项目。
答案 0 :(得分:1)
我想通了(感谢Tsyvarev的评论)。我正在使用的外部构建的项目设置了它自己的RPATH。所以我在错误消息中找到的字符串是RPATH,而不是我在“顶级”项目中设置的任何RPATH。
似乎设置外部项目的RPATH不能覆盖该外部项目的内部设置RPATH(如果它正在使用CMAKE)。