Conan 拷贝依赖库到指定目录
2024年04月18日更新,发现了更好的方案。
在 conanfile.txt 中添加
[imports]
bin, *.dll -> ./bin # Copies all dll files to './bin'
lib, *.so* -> ./lib # Copies all so files to './lib'
lib, *.dylib* -> ./lib # Copies all dylib files to './lib'
这样的话conan install的时候会将动态库拷贝到对应目录,当然如果是Linux系统的话是没有dll的,需要根据自己的情况调整。
------------以前的方案----------------
function(copy_shared_libraries CONAN_LIB_DIRS TARGET_DIR)
foreach(LIB_DIR ${CONAN_LIB_DIRS})
file(GLOB_RECURSE LIB_FILES ${LIB_DIR}/*.so*) # 使用通配符匹配所有可能的共享库文件
foreach(LIB_FILE ${LIB_FILES})
# 获取共享库文件名 这个名字不包含路径
get_filename_component(LIB_NAME ${LIB_FILE} NAME)
# 拷贝文件 到指定目录
file(COPY ${LIB_FILE} DESTINATION ${TARGET_DIR})
endforeach()
endforeach()
endfunction()
如果未经配置,conan会将应用程序输出到bin目录下,这个目录是变量 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} 指定的。
通常我会在应用程序所在目录创建一个lib文件夹,用来存放共享库
build
bin
you_exe
lib
xxxxx.so
xxxxx.so
调用这个函数可以帮助你拷贝so,例如:
copy_shared_libraries(${CONAN_LIB_DIRS_OPENSSL} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib)