CMake中RPATH的处理

简介:

CMake默认不会对安装之后的目标,在头部加上RPATH信息。而对构建产生的中间文件,是会加上RAPTH信息的。RPATH中的路径信息,来自link_directories()中指定的库所在路径,不管这些路径,是属于工程的构建路径(CMAKE_BINARY_DIR),还是外部路径。然后在make install之后,安装目标的头部不会增加RPATH。如果恰好那些路径,不在系统的标准库查找范围,这时运行会出现

error while loading shared libraries: xxx

这样的错误信息。

这时,可以通过设置LD_LIBRARY_PATH的环境变量,来告知系统额外的库查找路径。

也可以加上

SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

来让CMake在安装的目标中加入RPATH信息,但是注意即便加了这个,对于位于工程构建路径的那些PATH,还是不会加入到最终的RPATH当中的。

另外,也可以手动指定添加的RPATH:

SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

对于这种情况,默认情况下,这个PATH在构建产生的中间文件,是不增加的;而是只对安装的目标有效。如果你想针对构建的中间文件也有效果,可以加上

SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)

参考:https://cmake.org/Wiki/CMake_RPATH_handling

目录
相关文章
|
3月前
|
Unix C++
在VS2019中CMake生成出现报错
在VS2019中CMake生成出现报错
108 0
在VS2019中CMake生成出现报错
|
8月前
|
C++
CMake中使用vcpkg
vcpkg是一个微软开源的C++包管理器。 在以前的开发中,如果在项目中需要使用某个开源库,例如qt,我们需要取官网下载qt的源码,然后构建得到对应的库,然后在项目中链接这个库。对于自己熟悉的库还好说,若是不熟悉的库,如何拉取源码?如何构建?如何在项目中引用?等等这些问题通常会困扰我们,然而,大多数情况下,我们只是使用这个开源库,并不需要关心这个库的构建和编译等问题。如此,在以前的开发过程中,往往会花费不少的时间在引入开源库上。 vcpkg是在背景下开发出来的,通过vcpkg,我们可以在项目中很方便的引入开源库,不用再关心拉取代码、构建开源库的这些事情。 CMake构建的项目中引入开源库
111 0
|
Linux 异构计算
|
C++
cmake安装与使用
cmake安装与使用
262 0
cmake安装与使用
|
Ubuntu
CMake
CMake
107 0
|
消息中间件 关系型数据库 C语言
|
Linux 前端开发 关系型数据库
|
Java Linux C语言
|
C++
CMake vs Make对比
程序员现在已经使用了CMake和Make了很久。当您加入大公司或开始使用大型代码库开发项目时,您需要处理所有这些构建。你必须看到这些“CMakeLists.txt”文件浮动。你应该在终端上运行“cmake”和“make”命令。
1745 0