2010-07-28 119 views
18

我正在使用CMake在Linux上构建一个程序。该程序编译成功并从项目构建目录运行。该方案是在目录中的自定义库链接${HOME}/build/lib使用CMake创建二进制文件删除运行时路径

我有一个安装阶段有:

install(TARGETS ProgName RUNTIME DESTINATION bin) 

当我运行make install程序被放置在正确的位置,但cmake安装程序会删除运行时来自二进制的路径。

-- Install configuration: "Debug" 
-- Installing: *binary name* 
-- Removed runtime path from "*binary name*" 

我看了网上讨论LD_LIBRARY_PATH变量的误用,所以我想如果可能守我仅限于系统库的位置上的文章。我不是系统管理员,所以我无法将该位置添加到默认链接程序搜索路径。

有没有人知道如何在安装或至少自定义哪些路径添加到运行时时保持开发时链接路径?

干杯

回答

9

注意:如果你不希望修改cmake脚本本身,围绕设置属性,你可以启动cmake,指令要求不要删除运行时路径:
请参阅“Variables that Control the Build”,其变量为:“CMAKE_SKIP_RPATH

如果为true,则不要添加运行时路径信息。

如果将其设置为TRUE,则rpath信息不会添加到已编译的可执行文件中。
默认情况下,如果平台支持它,则添加rpath信息。这允许从构建树中轻松运行。
要在安装步骤中省略RPATH,而不是构建步骤,请改为使用CMAKE_SKIP_INSTALL_RPATH

如果传递已包含正确的运行时路径,那么该指令将避免cmake对包含在所述传递中的当前运行时路径进行任何修改。

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake 
+2

超级!谢谢,比第一个答案要好得多! – Davide 2013-04-11 16:22:59

+0

+1,谢谢你的回答,正是我在找的东西,即让CMake *表现得像*它应该默认做的那样! – 2016-11-08 15:48:12

0

这适用于CMake 2。8

set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) 

其中foo是你定义的目标更早:

project(foo) 
add_executable(foo ...) 
    ... 
install(TARGETS foo DESTINATION bin) 
    ... 

之前

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Removed runtime path from "/opt/mystuff/bin/foo" 

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Set runtime path of "/opt/mystuff/bin/foo" to "/opt/zzyzx/lib:/opt/bar/lib/x86_64"