Cmake将二进制文件的相对路径设置为第3方库

问题描述

我正在尝试使用 Cmake 制作我的第一个项目,但我遇到了静态链接到 *.so 库的问题。

我的二进制文件只能从构建文件夹中看到库。

我已尝试使用“RPATH 处理”手册中的此语句,但目前还没有使用:

set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
target_link_libraries(mt libjack.so "${CMAKE_BINARY_DIR}/lib/librtmidi.so")

与 qmake 相比,我可以将其包含到 pro 文件中:

QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib

然后,无论我将二进制文件部署到哪里,一个都将链接到 /lib 文件夹中的库。

谢谢!

解决方法

在 Tsyvarev 的帮助下,无论我在哪里复制它们,我都设法使我的二进制文件与 lib 文件夹静态链接。 对于 CMAKE_INSTALL_RPATH 我放了“lib”(而不是“/lib”) 将此块放在 add_executable 定义之前

...
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
...
add_executable(mtest main.cpp)
...
target_link_libraries(mtest libjack.so "${CMAKE_BINARY_DIR}/lib/librtmidi.so")
...

谢谢!