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

Sim*_*ker 21 linux linker runtime cmake

我正在使用CMake在linux上构建程序.该程序成功编译并从项目构建目录运行.该程序与目录中的自定义库链接${HOME}/build/lib

我有一个安装阶段:

install(TARGETS ProgName RUNTIME DESTINATION bin)
Run Code Online (Sandbox Code Playgroud)

当我运行make install程序时,将其置于正确的位置,但cmake安装程序将从二进制文件中删除运行时路径.

-- Install configuration: "Debug"
-- Installing: *binary name*
-- Removed runtime path from "*binary name*"
Run Code Online (Sandbox Code Playgroud)

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

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

干杯

Rob*_*ard 12

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

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

  • 多亏了这一点,设法让它使用"set_property(TARGET*binary*PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)"行来设置构建链接路径的运行时路径.干杯 (2认同)

Von*_*onC 12

注意:如果您不想修改cmake脚本本身,设置属性,则可以cmake使用指令启动,要求不删除运行时路径:
请参阅" 控制构建的变量",带变量:" CMAKE_SKIP_RPATH"

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

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

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

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake
Run Code Online (Sandbox Code Playgroud)

  • 超!谢谢,比第一个答案要好得多! (2认同)