【问题标题】:cmake - extracting pdb files from object librariescmake - 从对象库中提取 pdb 文件
【发布时间】:2015-06-15 06:14:10
【问题描述】:

我正在使用object libraries 构建我的静态库,如使用 CMake 3.1.3 所示。

我有

ADD_SUBDIRECTORY(A)
ADD_SUBDIRECTORY(B)
....
ADD_LIBRARY(mylib STATIC ${SOURCES}
                  $<TARGET_OBJECTS:A> 
                  $<TARGET_OBJECTS:B> )
SET_TARGET_PROPERTIES(mylib PROPERTIES COMPILE_PDB_NAME mylib COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR})

现在,我的问题是 A 在 A 的 CMake 子目录中生成 vc120.pdb。 B 在 B 的 CMake 子目录中生成自己的 vc120.pdb。并且,mylib 在主二进制 cmake 文件夹中生成 mylib.pdb。

我只想要一个静态库和一个 pdb 文件。我只想要 mylib 和 mylib.pdb。

如何将所有 vc120.pdb 合并到 mylib.pdb 中,或者最好只生成一个 pdb 文件?

【问题讨论】:

    标签: visual-c++ cmake pdb-files


    【解决方案1】:

    这不是您问题的直接答案,而是您可能想要考虑的替代解决方案。

    对于静态库,您最好使用/Z7 来生成调试信息。使用/Z7 时,编译器不会生成.PDB 文件,而是将调试信息直接嵌入到生成的目标文件中。

    当这些目标文件被链接为静态库时,lib.exe 会将调试信息从所有目标文件复制到生成的 .lib 文件中。不需要将 .pdb 文件与 .lib 文件一起分发。

    与 CMake 用来生成 DLL 或 EXE 的 link.exe 不同,lib.exe 没有输出 .PDB 文件的选项。

    通过 CMake,您可以通过以下方式设置所需的选项。对于对象库使用:

    add_library(A OBJECT lib2.cpp)
    set_target_properties(A PROPERTIES COMPILE_OPTIONS "/Z7")
    

    要生成最终的静态库,请使用:

    add_library(mylib STATIC main.cpp $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B> )
    set_target_properties(mylib PROPERTIES COMPILE_OPTIONS "/Z7")
    

    【讨论】:

      【解决方案2】:

      我已经设法联系了 Kitware 的人(CMake 所有者)。

      他们说,

      "设置A、B、mylib的COMPILE_PDB_*属性都指向同一个地方。对象库是独立构建的,不知道什么会消耗它们(或者如果多个目标消耗它们),所以需要单独配置。”

      所以,在 A 和 B 中,做

      add_library(A OBJECT a.c)
      set_target_properties(A PROPERTIES
          COMPILE_PDB_NAME "mylib"
          COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
      )
      

      【讨论】:

      猜你喜欢
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多