[CMake] LOCATION target property, generator expressions

Hendrik Greving hendrik.greving.smi at gmail.com
Mon Oct 8 17:17:53 EDT 2018


Is there a good place to record the feature request (- if ack'd -)? gitlab
issue?
Thanks!

On Thu, Oct 4, 2018 at 2:24 PM Hendrik Greving <
hendrik.greving.smi at gmail.com> wrote:

> Hi, we would like to..
> (*) keep modularity and flexibility (i.e. avoid hard-coding relative
> paths) w/ binaries and libraries in build tree at flexible locations.
> (*) update rpath in the target binary based on relative paths from
> $ORIGIN, such that a user or any other script can move the build (and later
> install) tree.
> The project (DynamoRIO) has multiple libraries and multiple target
> binaries such that the CMAKE* solution (and thanks for that in any case)
> above would not work for all of them. LOCATION and file(RELATIVE..)
> provided that functionality. With CMP0026 and LOCATION going away, there
> seems to be no substitute for this, even w/ 3.13 it sounds like we still
> couldn't compute the relative path(s). Would it be feasible for me to put
> in a feature request in cmake?
>
>
> On Wed, Oct 3, 2018 at 11:28 PM Hendrik Sattler <post at hendrik-sattler.de>
> wrote:
>
>>
>> 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.smi at 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.smi at 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.king at 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
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20181008/802733bf/attachment.html>


More information about the CMake mailing list