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

使用CMake时,如何将vcpkg库的.pdb文件复制到构建目录?

Debug/RelWithDebInfo模式下vcpkg未同步复制依赖库的.pdb文件问题

我正将项目迁移到CMake+vcpkg,但在Debug或RelWithDebInfo构建模式下,构建过程只会复制vcpkg中的.dll文件,对应的.pdb文件没有同步复制到输出目录。

示例CMakeLists.txt

cmake_minimum_required(VERSION 3.22)

project(PdbTest)

find_package(fmt CONFIG REQUIRED)

add_executable(Test main.cpp)
target_link_libraries(Test PRIVATE fmt::fmt)

执行的构建命令

cmake .. --toolchain C:\Tools\vcpkg\scripts\buildsystems\vcpkg.cmake
cmake --build . --config RelWithDebInfo

输出目录文件列表

构建完成后,<build-dir>\RelWithDebInfo目录下仅生成以下文件,缺少fmt.pdb:

25/07/2022  06:54 am           134,144 fmt.dll
25/07/2022  07:04 am            41,984 Test.exe
25/07/2022  07:04 am         1,028,096 Test.pdb

我了解到vcpkg内部有vcpkg_copy_pdbs.cmake脚本,可在vcpkg构建库时将.pdb复制到安装目录,考虑过复制该脚本到项目中使用但可能需要调整,想知道有没有更优的解决方案?


解决方案

1. 启用vcpkg自动PDB复制(推荐)

vcpkg新版本已支持自动将依赖库的PDB文件复制到输出目录,确保你的vcpkg是最新版本后,可通过以下方式启用:

  • 在CMakeLists.txt中添加配置:
    set(VCPKG_APPLOCAL_DEPS_DEBUG ON)
    set(VCPKG_APPLOCAL_DEPS_RELWITHDEBINFO ON)
    
  • 或者在cmake配置命令中传递参数:
    cmake .. --toolchain C:\Tools\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_APPLOCAL_DEPS_DEBUG=ON -DVCPKG_APPLOCAL_DEPS_RELWITHDEBINFO=ON
    

2. 自定义CMake POST_BUILD命令复制PDB

如果上述方法不生效,可编写自定义命令,在目标构建完成后自动复制依赖库的PDB:

add_custom_command(TARGET Test POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        $<TARGET_PDB_FILE:fmt::fmt>
        $<TARGET_FILE_DIR:Test>
    COMMENT "Copying fmt.pdb to output directory"
)

若有多个依赖库,可重复此逻辑,或编写循环批量处理所有依赖目标。

3. 复用vcpkg的vcpkg_copy_pdbs脚本

将vcpkg的vcpkg_copy_pdbs.cmake脚本复制到项目目录,在CMakeLists.txt中引入并调用:

include(vcpkg_copy_pdbs.cmake)
vcpkg_copy_pdbs(TARGET Test)

需注意脚本中的路径逻辑可能需要适配你的项目结构,确保能正确定位到vcpkg安装的库的PDB文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:36:27