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)
posted @ 2024-01-10 09:49  Smalldy  阅读(39)  评论(0编辑  收藏  举报