CMake导入库rpath

led*_*ter 3 cmake shared-libraries ld

我有一个库,并且我通过(库已设置)IMPORTED SHARED与其链接。target_link_librariesIMPORTED_LOCATION

但是在输出中安装后ldd我看到类似的内容:

path/on-dev-machine/to/libxxx.so => not found

而不是仅仅

libxxx.so => path/on-testing-machine/to/libxxx.so

为什么会这样/我该如何解决?我正在添加 lib 路径/etc/ld.so.conf.d

示例代码:

include(GNUInstallDirs)

function(add_and_install_lib lib_name location external_dep)
    if(${location} MATCHES ".*\\.so")
        add_library(${lib_name} SHARED IMPORTED) # MODULE treated as shared
    else()
        add_library(${lib_name} STATIC IMPORTED)
    endif()

    set_property(TARGET ${lib_name} PROPERTY IMPORTED_LOCATION ${location})

    add_dependencies(${lib_name} ${external_dep})
endfunction()


set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR}") # this doesn't seem to help
Run Code Online (Sandbox Code Playgroud)

led*_*ter 5

如果有人关心的话,那就是每个导入的库的IMPORTED_NO_SONAME属性(没有设置为TRUE)强制采用完整路径。

在我看来,和 也CMAKE_SKIP_RPATH有助于CMAKE_SKIP_INSTALL_RPATH确保您拥有干净的运行时路径(与问题没有直接关系,但仍然如此)。