MSVCコンパイル時に表示される「Previous IPDB not found, fall back to full compilation」メッセージについて

Visual C/C++

環境

Visual Studio 2019
「空プロジェクト」新規作成してビルド

現象

Visual Studio 2019でのコンパイル時、X64ビルドでのリンク時のコード生成の設定により、コンパイルプロセス中に次のようなメッセージが表示される場合があります。

リビルドを開始しました...
1>------ すべてのリビルド開始: プロジェクト:tinysample001, 構成: Release x64 ------
1>main.c
1>コード生成しています。
1>Previous IPDB not found, fall back to full compilation.
1>All 4 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
1>コード生成が終了しました。
1>tinysample001.vcxproj -> C:\Users\gitclone\tinymsvc\tinysample001\Release_x64\tinysample001.exe
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

Release X64構成でのリンカー設定

デフォルトオプション:「高速リンク時のコード生成を使用する (/LTCG)」

/LTCG(完全リンク時のコード生成)を使用した場合: 上記“Previous IPDB not found”メッセージは表示されない。

Debug X64構成でのリンカー設定

デフォルトオプション:「なし」(No Link-Time Code Generation)に設定されています。これは、リンカーが実行ファイルを生成する際に追加の最適化を行わないことを意味し、コードのトレースやデバッグが容易になります。最適化が行われないため、生成されたバイナリは実行速度が遅くなる可能性がありますが、デバッグ時の挙動がソースコードと一致しやすくなるため、デバッグプロセスには有利です。

詳細説明

/LTCG:incrementalと/LTCG(完全リンク時のコード生成)は、Visual StudioのC/C++コンパイラで使用されるリンク時のコード生成(Link-Time Code Generation)のオプションですが、それぞれ異なる目的と最適化の方法で機能します。

/LTCG:incremental

インクリメンタルビルドを支援するために設計されており、前回のビルドから変更された部分のみをリンク時に再コンパイルし、最適化します。これにより、全体のリビルドが不要となり、開発プロセス中のビルド時間を短縮できます。ただし、前回のビルドから生成された中間ファイル(IPDB/IOBJ)が見つからない場合、全関数が再コンパイルされるため、「Previous IPDB not found, fall back to full compilation」というメッセージが表示されます。

/LTCG

プロジェクトの全体を対象にリンク時のコード生成を行い、プロジェクトの全コードを最適化し、性能が最大限に引き出されるように全体を再コンパイルします。これにより生成される実行ファイルは、実行速度が向上する可能性がありますが、ビルド時間は長くなる傾向があります。

まとめ

プロジェクト設定で「リンク時のコード生成」オプションを/LTCG:incrementalから/LTCG(完全リンク時のコード生成)に変更することで、「Previous IPDB not found, fall back to full compilation」というメッセージを防ぐことができます。この変更により、ビルド時間は長くなる傾向があります。

タイトルとURLをコピーしました