簡體   English   中英

使用cmake編譯靜態庫的發行版時如何獲取pdb文件?

[英]How to get pdb files while compiling release version of static library using cmake?

我有一個靜態庫,正在使用cmake進行編譯。 現在,當我精通調試模式時,會生成pdb文件,但是在編譯發布模式時,不會生成pdb文件。 以下是cmake中的一段代碼:

    if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
        set_target_properties(${PROJECT_NAME} PROPERTIES IMPORTED_CONFIGURATIONS "Debug")
        set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_PDB_NAME ${PROJECT_NAME} COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin_debug" )
    elseif("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
        set_target_properties(${PROJECT_NAME} PROPERTIES IMPORTED_CONFIGURATIONS "Release")
        set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_PDB_NAME ${PROJECT_NAME} COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin_release" )

我想擁有用於調試以及發布版本的pdb文件。 所以,我怎么能擁有它? 確實需要建議。

CMake確實像Visual Studio一樣為您的VS解決方案生成RelWithDebInfo配置。

但是您也可以將調試信息添加到其他配置(如Release ,也可以使用target_compile_options()生成器擴展來提供必要的/Zi/Z7命令:

target_compile_options(
    ${PROJECT_NAME} 
    PRIVATE 
         "$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:RELEASE>>:/Zi>"
)

或者您可以說,對於具有add_compile_options()所有配置和所有目標,都希望使用它(並且沒有生成器表達式以提高可讀性):

project(...)
if (MSVC)
    add_compile_options("/Zi")
endif()

參考文獻

我沒有使用CMake,但看起來它會生成Visual Studio項目和解決方案文件,因此基於此...

默認情況下,VS在發行版配置中不生成.pdb。 為此,您需要在項目文件中包含一些屬性。 因此,您需要使CMake在它生成的.xxproj文件中輸出類似於以下內容的內容:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <DefineDebug>false</DefineDebug>
    <Optimize>true</Optimize>
</PropertyGroup>

這些屬性為您提供了一個以其他方式發布/優化的版本,唯一的不同在於它還會生成.pdb。

PropertyGroup會根據您的配置而有所不同,但是您需要活動(正在編譯)的配置才能具有子屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM