cmake:如何在安装过程中保留库的路径
cmake: how to keep path to libraries during installation
我有一些可执行文件依赖于在源中设置相对路径的配置文件。
可执行文件链接到在同一项目中创建的库。
我希望实现的是在安装后立即使用可执行文件,即安装会将可执行文件、配置文件和库复制到合适的位置,并将可执行文件链接到库.
我目前有:
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)
但这没有用
目标创建时间INSTALL_RPATH target's property which affects on RPATH for installed executable. This property is set to value of variable CMAKE_INSTALL_RPATH。
因此,变量CMAKE_INSTALL_RPATH
需要在之前设置 add_executable()
调用使目标生效。
大多数全局变量和目标未知命令仅在目标创建时影响目标。
也有例外,例如命令 include_directories()
,它会影响在当前目录中创建的所有目标。但是 在创建目标之前准备好所有内容 可能是一个很好的做法。
我遇到了同样的问题,刚刚添加
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
在 add_library
和 add_executable
命令之前,然后它起作用了。
您可以找到更多详细信息 here。
我有一些可执行文件依赖于在源中设置相对路径的配置文件。
可执行文件链接到在同一项目中创建的库。
我希望实现的是在安装后立即使用可执行文件,即安装会将可执行文件、配置文件和库复制到合适的位置,并将可执行文件链接到库.
我目前有:
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)
但这没有用
目标创建时间INSTALL_RPATH target's property which affects on RPATH for installed executable. This property is set to value of variable CMAKE_INSTALL_RPATH。
因此,变量CMAKE_INSTALL_RPATH
需要在之前设置 add_executable()
调用使目标生效。
大多数全局变量和目标未知命令仅在目标创建时影响目标。
也有例外,例如命令 include_directories()
,它会影响在当前目录中创建的所有目标。但是 在创建目标之前准备好所有内容 可能是一个很好的做法。
我遇到了同样的问题,刚刚添加
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
在 add_library
和 add_executable
命令之前,然后它起作用了。
您可以找到更多详细信息 here。