问题描述

项目中使用Cmake自动化构建,首先将源码生成动态库,然后编译测试用例,最后把编译好的动态库和测试例都转移到输出目录中方便部署。 出现的问题是输出目录中的测试用例可执行文件在运行时提示找不到对应的动态库,需要手动设置LD_LIBRARY_PATH

解决方法

使用 rpath 选项和make install

在 CMakeLists.txt 中添加链接选项:在生成可执行文件(测试用例)的 add_executable 和 target_link_libraries 部分,通过 SET_TARGET_PROPERTIES 来设置 rpath。

示例如下:

# 生成动态库
add_library(mylib SHARED mylib.cpp)

# 生成测试用例可执行文件
add_executable(test_mylib test_mylib.cpp)
target_link_libraries(test_mylib mylib)

# 设置 RPATH,假设动态库和可执行文件最终在同一输出目录下
SET_TARGET_PROPERTIES(test_mylib PROPERTIES
    INSTALL_RPATH "Path/of/mylib"
)

# 安装动态库
install(TARGETS mylib
    LIBRARY DESTINATION lib
)

# 安装可执行文件
install(TARGETS test_mylib
    RUNTIME DESTINATION bin
)

# 安装头文件
install(FILES myheader.h
    DESTINATION include
)