首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cmake:设置rpath

Cmake:设置rpath
EN

Stack Overflow用户
提问于 2020-06-15 17:21:06
回答 2查看 159关注 0票数 0

我正在尝试在一个C++项目中从GNU Make切换到CMake。我的计划是与我的库的源代码一起分发,以及所需的两个外部库的代码。

该项目的结构如下

代码语言:javascript
复制
├── CMakeLists.txt
├── lib
│   ├── lib1
│   └── lib2
├── main.cpp
└── src
    ├── CMakeLists.txt
    ├── subdir1
    ├── subdir2

现在,在lib1下,还有一个名为'lib‘的文件夹,里面包含了lib1需要的库: Boost,Eigen,TBB和Sundials。主要问题是我需要将rpath标志设置为指向tbb库。

在我的Makefile中,事情是这样的

代码语言:javascript
复制
LIB1 := lib/lib1
LIB2 := lib/lib2
CXX = g++
CFLAGS = \
    -std=c++1y \
    -MMD \
    -I$(LIB1) \
    -I$(LIB1)/lib/eigen_3.3.3/ \
    -I$(LIB1)/lib/boost_1.69.0/  \
    -I$(LIB1)/lib/sundials_4.1.0/include  \
    -I$(LIB1)/lib/tbb_2019_U8/include  \
    -I$(LIB2) \
    -D_REENTRANT

LDLIBS = \
    $(shell pkg-config --libs protobuf) -lpthread  -L$(LIB1)/lib/tbb \
     -ltbb -Wl,-rpath,"$(LIB1)/lib/tbb"

一切都很顺利

现在,迁移到CMake,我很难指定正确的rpath标志。我的尝试如下

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.13.0)
project(myproj)

find_package(PkgConfig REQUIRED)
pkg_check_modules(PROTO REQUIRED protobuf)

set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath,${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1/lib/tbb")

add_executable(bayesmix main.cpp)
add_subdirectory(src)

target_include_directories(bayesmix PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1/lib/boost_1.69.0
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1/lib/eigen_3.3.3
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1/lib/tbb_2019_U8/include)


target_link_libraries(bayesmix 
    -L${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1/lib/tbb
    -ltbb 
    -lpthread
    ${PROTO_LIBRARIES})

target_compile_options(myproj PUBLIC -D_REENTRANT -fPIC)

当我运行make all时,我得到了下面的liker错误

代码语言:javascript
复制
/usr/bin/ld: cannot find -ltbb

我试着查看文档(https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling),但是我不知道如何解决我的问题!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-15 17:28:19

cmake中的命令是相当直白的。尝试:

代码语言:javascript
复制
target_link_directories(bayesmix PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/lib1/lib/tbb
)
target_link_libraries(bayesmix PRIVATE
    tbb 
    pthread
    ${PROTO_LIBRARIES}
)
票数 0
EN

Stack Overflow用户

发布于 2020-06-15 17:25:27

尝试使用target_link_options而不是target_link_libraries

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62385120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档