Cmake: How to set rpath to ${ORIGIN} with cmake

跟風遠走 提交于 2020-02-06 07:30:24

问题


According to this SO question, Linux executable can't find shared library in same folder passing -Wl,-rpath,${ORIGIN} is the way to get a Linux executable to search for .sos in the same directory as the executable.

We're using cmake, so I'm adding a line of the form

target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN})

to CMakeLists.txt. The problem with that is that cmake tries to interpret the nine character sequence ${ORIGIN} as a variable, and replaces it with nothing.

So far, I've tried:

$${ORIGIN}
\${ORIGIN}
$\{ORIGIN\}
$$\{ORIGIN\}
\$\{ORIGIN\}

none of which have worked. How can I get this done?

-- Edit --

As noted by @Tsyvarev's comment, it turns out this was an XY problem in my particular case, since cmake has facilities directly designed to manipulate rpath. Using this, I was able to get a solution.

In my case, adding the following three lines to CMakeLists.txt did the trick.

SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}")

Note that part of our build process involves copying the .so to the output folder in preparation for building the final tarball artifact. So using -rpath=${ORIGIN} works for both testing in the build tree, and final installation of the executable in the Docker container.

来源:https://stackoverflow.com/questions/57915564/cmake-how-to-set-rpath-to-origin-with-cmake

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!