使用CMake创建二进制文件会删除运行时路

时间:2010-07-28 10:40:40

标签: linux runtime linker cmake

我正在使用CMake在linux上构建程序。该程序成功编译并从项目构建目录运行。该程序与目录${HOME}/build/lib

中的自定义库链接

我有一个安装阶段:

install(TARGETS ProgName RUNTIME DESTINATION bin)

当我运行make install时,程序会被放到正确的位置,但cmake安装程序会从二进制文件中删除运行时路径。

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

我在互联网上阅读过有关LD_LIBRARY_PATH变量滥用的文章,所以我想尽可能将我的内容限制在系统库位置。我不是sysadmin所以我不能将位置添加到默认链接器搜索路径。

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

干杯

3 个答案:

答案 0 :(得分:11)

您应该查看set_target_properties命令和属性BUILD_WITH_INSTALL_RPATH

http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:set_target_properties

答案 1 :(得分:10)

注意:如果您不想自己修改cmake脚本,设置属性,可以使用指令启动cmake,要求不删除运行时路径:
请参阅“Variables that Control the Build”,其中包含变量:“CMAKE_SKIP_RPATH

  

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

     

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

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

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake

答案 2 :(得分: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"