You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将链接库与MinGW依赖库复制到可执行文件输出目录?

解决方案

1. 复制自定义库 mylib 到可执行文件目录

修改 mytestconsole/CMakeLists.txt,添加构建后复制命令:

add_custom_command(TARGET mytestconsole POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        $<TARGET_FILE:mylib>
        $<TARGET_FILE_DIR:mytestconsole>
    COMMENT "复制mylib动态库到可执行文件目录"
)
  • $<TARGET_FILE:mylib>:自动获取mylib生成的DLL文件路径
  • $<TARGET_FILE_DIR:mytestconsole>:自动获取mytestconsole.exe所在的输出目录
  • copy_if_different:仅当文件有变化时才复制,避免重复操作

2. 复制MinGW运行时库到可执行文件目录

利用CMake 3.21+支持的file(GET_RUNTIME_DEPENDENCIES)命令收集依赖,结合脚本实现复制:

步骤1:在mytestconsole/CMakeLists.txt中添加命令

add_custom_command(TARGET mytestconsole POST_BUILD
    COMMAND ${CMAKE_COMMAND} -D EXE_PATH=$<TARGET_FILE:mytestconsole>
                             -D DEST_DIR=$<TARGET_FILE_DIR:mytestconsole>
                             -P ${CMAKE_SOURCE_DIR}/copy_mingw_libs.cmake
    COMMENT "复制MinGW运行时库到可执行文件目录"
)

步骤2:在项目根目录创建copy_mingw_libs.cmake脚本

file(GET_RUNTIME_DEPENDENCIES
    EXECUTABLES ${EXE_PATH}
    RESOLVED_DEPENDENCIES_VAR RESOLVED_LIBS
    UNRESOLVED_DEPENDENCIES_VAR UNRESOLVED_LIBS
)

foreach(LIB ${RESOLVED_LIBS})
    # 筛选需要的MinGW运行时库
    if(LIB MATCHES "libgcc_s_seh-1\\.dll$" OR
       LIB MATCHES "libstdc\\+\\+-6\\.dll$" OR
       LIB MATCHES "libwinpthread-1\\.dll$")
        file(COPY ${LIB} DESTINATION ${DEST_DIR} ONLY_IF_DIFFERENT)
    endif()
endforeach()

3. 修正install命令的默认安装路径(可选)

若不想让install命令默认安装到Program Files,可在顶层CMakeLists.txt开头添加:

set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/install" CACHE PATH "安装目录" FORCE)

或在配置项目时通过命令行指定:

cmake -S . -B build -DCMAKE_INSTALL_PREFIX=./install

这样安装文件会被放到项目根目录的install文件夹中。

原错误说明

你使用的LIST_PREREQUISITES是CMake内部file命令的子命令(需通过file(LIST_PREREQUISITES)调用),并非系统可执行命令,因此直接作为add_custom_command的COMMAND参数会报错。

内容的提问来源于stack exchange,提问作者GoodSimon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:30:53