我有一些可执行文件,它依赖于在源文件中设置相对路径的配置文件。
针对库的可执行文件链接,该库在同一项目中创建。
我希望实现的是安装后可执行的可执行文件,即安装会将可执行文件,配置文件和库复制到合适的位置,并且可执行文件将链接到库。 / p>
我现在拥有的东西:
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)
但这不起作用
答案 0 :(得分:2)
INSTALL_RPATH target的属性会影响安装的可执行文件的RPATH。此属性在目标创建时设置为变量CMAKE_INSTALL_RPATH 的值。
因此,变量CMAKE_INSTALL_RPATH
需要在 add_executable()
调用才能对目标生效之前设置。
大多数全局变量和目标未识别命令仅在目标创建时上影响目标。
有一些例外,例如命令include_directories()
,它会影响当前目录中创建的所有目标。但在创建目标之前准备好所有内容可能是一种很好的做法。