CMAKE:将共享的LIB与其他LIB与相对分布路径联系起来



上下文:我正在开发一个共享库,以...与其他用户共享。我的图书馆取决于许多其他图书馆,这些图书馆也迫使我也分享所有这些依赖关系。我想使用cmake构建此lib。

问题:由于我的LIB用户肯定会将其重新定位到与我不同的目录树,所以我的lib必须使用相对路径搜索其依赖项。我的意思是总是,或者至少在./libs目录中搜索。

问题:如何修改我的CMakeLists.txt以完成此任务?

我的项目树

myproject/
|---- CMakeLists.txt
|---- build/
|---- libs/
  |---- libdep1.so.1.2
  |---- libdep2.so.2.1
  |---- libdep3.so.0.6
|---- src/
  |---- file0.cpp
  |---- file1.cpp
  |---- file1.hpp
  |---- file2.cpp
  |---- file2.hpp
  • build 是我将 cd/build的目录,致电cmake ..make
  • libs 是我将在所有依赖项中复制(其他libs(与我的lib共享的目录。
  • src 是我所有CPP和HPP文件的目录。

我的CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)
project(myproject)
SET(CMAKE_BUILD_TYPE Debug)
SET(CMAKE_VERBOSE_MAKEFILE ON)
add_definitions(-std=c++11 -fPIC -m64)
SET (THIRD_PARTY_INCLUDE_ONE /home/3rdparty/xpto/include/)
SET (THIRD_PARTY_INCLUDE_TWO /home/3rdparty/ypto/include/)
include_directories(${THIRD_PARTY_INCLUDE_ONE} ${THIRD_PARTY_INCLUDE_TWO})
add_library(
    mysharedlib SHARED
    ${CMAKE_SOURCE_DIR}/src/file0.cpp
    ${CMAKE_SOURCE_DIR}/src/file1.cpp
    ${CMAKE_SOURCE_DIR}/src/file2.cpp)
SET (DEP_LIBS ${CMAKE_SOURCE_DIR}/libs)
target_link_libraries(
    mysharedlib
    ${DEP_LIBS}/libdep1.so.1.1
    ${DEP_LIBS}/libdep2.so.2.1
    ${DEP_LIBS}/libdep3.so.0.6)

编辑1

我尝试在add_library(...)之前使用SET (CMAKE_SHARED_LINKER_FLAGS "-Wl,-rpath,$ORIGIN/libs"),但似乎没有效果。我认为这可能是因为我使用${DEP_LIBS}/链接依赖关系,但是如果我删除它,它将无法找到LIB,也会导致错误,说我应该使用-fPIC重新编译依赖关系。我坚信这是一种副作用,因为libs都是共享的libs(libnameofthelib.so(,并且它可以与CMakeFile.txt一起使用,而没有此新标志。

我已经进行了更多测试,实际上,SET (CMAKE_SHARED_LINKER_FLAGS "-Wl,-rpath,$ORIGIN/libs")的使用解决了问题。

最新更新