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)