Hi,
You can use the following cmake snippet right below the project()
command to add proper RPATH values:
include ( GNUInstallDirs )
if ( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
list ( APPEND CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}" )
endif ( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
set ( CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
This assumes, libraries are installed to CMAKE_INSTALL_LIBDIR and
programs to CMAKE_INSTALL_BINDIR.
Additionally you may add the following line to disable a change in the
binary files during install target run:
set ( CMAKE_BUILD_WITH_INSTALL_RPATH ON )
The latter might be useful when splitting of debug symbols on ELF
platforms in post-build. However, it disables running the binaries in
the build tree.
CMake supports PDB files but split dbgsym file are (strangely) not
supported out-of-the-box.
HS
Zitat von Hendrik Greving <hendrik.greving....@gmail.com>:
By the way, the new generator expression support in 3.13, is this for
LINK_FLAGS or LINK_OPTIONS. And regardless of the former, will it be
possible to compute a relative path based on generator expressions, i.e.
file(RELATIVE $<TARGET_FILE_DIR:mytarget> $<TARGET_FILE_DIR:mytargetlib>)?
On Thu, Sep 27, 2018 at 5:03 PM Hendrik Greving <
hendrik.greving....@gmail.com> wrote:
Thanks. Ok one step back. What we want is to have the same relative path
from binary/executable to linked library in build and install tree (which
we assume is the same for us). Looks like by default, e.g. cmake 3.9, puts
in an absolute path. The current (c-)makefiles compute the relative part of
an executable -> library by using LOCATION and add this to
-Wl,-rpath=$ORIGIN/[relative part]. We want to do the same w/o LOCATION
(i.e. resolving CMP0026)
On Thu, Sep 27, 2018 at 7:29 AM Brad King <brad.k...@kitware.com> wrote:
On 09/26/2018 10:23 AM, Hendrik Greving wrote:
> Is there any way before 3.13 to achieve what I need? Right now we
> modify LINK_FLAGS based on something that is computed with values
> from LOCATION.
[snip]
> our cmake setup is using LOCATION property for two targets to compute
> a relative path from these two, and adds this to LINK_FLAGS
> (for rpath, but irrelevant in this context).
To at least see if 3.13 will support your use case, you could
try a nightly binary from here:
https://cmake.org/files/dev/?C=M;O=D
Use `$<TARGET_FILE_DIR:mytarget>/..` to refer to a path relative
to the target file location.
I've never seen a need to adjust link flags based on the target
location. CMake has several features for RPATH support. What
are you really trying to do?
-Brad
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake