在CMakeLists中使用相对路径引用动态库

5us2dqdw  于 2023-02-21  发布在  其他
关注(0)|答案(1)|浏览(466)

我有一个项目使用了一些动态库。生成的可执行文件在我的本地计算机上运行良好。但是,如果我与其他人共享它,可执行文件仍然会尝试在我的本地计算机中查找具有绝对路径的动态库,而其他计算机中当然不存在这些动态库。如何通过更改CMakeList来解决此问题?
我当前的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.24)
project(MyProject)
link_directories("libs/mac_arm64")
add_executable(MyProject main.cpp)
target_link_libraries(MyProject expat bz2 z geos_c)
gr8qqesn

gr8qqesn1#

当CMake构建库和可执行文件时,它(默认)嵌入了absoluteRPATH。这允许在构建机器上运行这些可执行文件时成功地找到所有库。
但是,这些库和可执行文件是在构建树中创建的,不能复制到其他计算机上。
相反,你应该安装这些库和可执行文件。在安装时,CMake会剥离它们的硬编码RPATH,这样就可以分发它们。
添加到您的CMakeLists.txt

install(TARGETS MyProject DESTINATION bin/)

然后用

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install
make
make install

这会将您的项目安装到build附近的install目录中。安装后,您可以将install目录中的内容打包并发送给您的客户/朋友/任何人。CMake甚至提供了cpack工具来轻松打包已安装的项目。
有关CMake中RPATH设置的更多信息,请参见其wiki

相关问题