【发布时间】:2016-02-02 15:28:23
【问题描述】:
我有一些可执行文件依赖于源中设置的相对路径的配置文件。
可执行文件链接到在同一个项目中创建的库。
我希望实现的是,安装后可执行文件开箱即用,即安装会将可执行文件、配置文件和库复制到合适的位置,并且可执行文件将链接到库。
我目前拥有的:
install(TARGETS ${test_executables} ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/plot"
DESTINATION .)
${PROJECT_NAME} 是库,plot 是配置文件所在的文件夹。
安装后发生的情况是所有文件都在安装文件夹中的正确位置,但可执行文件找不到库。
ps:
我之前试过添加这个:
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # tried also with TRUE
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)
但这不起作用
【问题讨论】:
-
ldd <executable>的输出是什么? -
@Tsyvarev "libamd_clmc_dmp.so => not found", amd_clmc_dmp 是包中编译的库
-
嗯,变量CMAKE_INSTALL_RPATH 仅影响INSTALL_RPATH 属性在目标创建时间。你设置
CMAKE_INSTALL_RPATH变量之前add_executable()调用吗? -
@Tsyvarev 它有效!谢谢 !如果你回答这个问题,我很乐意验证它
标签: cmake installation shared-libraries ldd