CMake导入库rpath

CMake imported library rpath

我有一个 IMPORTED SHARED 库,我通过 target_link_libraries 与它链接(该库已设置 IMPORTED_LOCATION)。

但是在 ldd 输出中安装之后,我看到如下内容:

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

而不仅仅是

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

为什么会这样/我该如何解决?我正在将库路径添加到 /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

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

我认为 CMAKE_SKIP_RPATHCMAKE_SKIP_INSTALL_RPATH 也很有用,可确保您拥有干净的运行时路径(与问题没有直接关系,但仍然如此)。