web-dev-qa-db-ja.com

CMakeにターゲットのPDBファイルをインストールさせる方法

Visual Studioで生成されたDLLファイルとEXEファイルのデバッグに必要なコンパニオンPDBファイルをCMakeにインストールさせるにはどうすればよいですか?

21
Phil

私はこの質問に対する良い答えを得ようとしてしばらく苦労しました。私は今、1つを見つけたと思います:_$<TARGET_PDB_FILE:tgt>_ジェネレータ式(CMake 3.1.3以降で利用可能)でinstallfileコマンドを使用します。具体的には、以下のinstallコマンドが機能しているようです。このコマンドは、ターゲットの$ {PROJECT_NAME} pdbファイルをターゲットのインストールbinディレクトリにコピーします。

_install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL)
_

このコマンドは、pdbファイルを生成する構成ごとにpdbファイルをインストールします。 OPTIONALを使用することにより、ソースpdbファイルが存在しない場合でもinstallコマンドはエラーを生成しません。このコマンドは、add_library(${PROJECT_NAME} ...)またはadd_executable(${PROJECT_NAME} ...)コマンドで作成されたターゲットに使用することを目的としています。

これが私が見つけた最良の答えです。もっと良いものがあれば教えてください。 cmake-generator-expressions ドキュメントの「InformationalExpressions」セクションで、_TARGET_PDB_FILE_ジェネレーター式のドキュメントを理解するのが難しいことがわかりました。

19
Phil

また、個別のPDBファイルが必要ない場合は、 Generate Debug Information optimized for sharing and publishing (/DEBUG:FULL) を使用してデバッグを行うことができます。これを行うには、ターゲットLINK_FLAGS${PROJECT_NAME} を設定する必要があります。

set_target_properties(${PROJECT_NAME} PROPERTIES
    LINK_FLAGS_DEBUG "-DEBUG:FULL"
)

または、何らかの理由でCMakeLists.txtを編集できない場合は、cmakeオプションを設定できます。

2
mr NAE