C++ プロジェクトで cmake を使用しています。GCC でプリコンパイル済みヘッダーを使用したい。
cmake
一度実行してから、実行時にmake
次のアクションを実行したい:
- ソース ツリー全体でカスタム ツール (python スクリプト) を実行します。一部のサブディレクトリに precompiled.h ヘッダーを生成します。その目的は、#include の *.h と *.cpp をスキャンし、それらを共通のプリコンパイル済み.h ファイルに移動することです。
g++ -c precompiled.h -o precompiled.h.gch
ステップ 1 の後に precompiled.h ファイルが変更された場合にのみ、GCC のプリコンパイル済みヘッダー ( ) を生成します。- 古いターゲットをビルドします(ステップ2の後。.gchファイルを使用したいため)
依存関係を追加することができたので、ターゲットをビルドするたびに、python スクリプトのターゲットが実行されます (すべてのターゲットが単一の global_init ターゲットに依存する必要があるため、これは醜いです)。また、python スクリプトを変更できるので、不要な場合は precompiled.h を変更しません。
しかし、次に何をすべきかわかりません。カスタムスクリプトを実行する必要があることをcmakeに伝え、その後、precompiled.h.gchを作成する必要があるかどうかを判断する方法はありますか? これで常にビルドされます (このファイルには多くの #include が含まれているため、時間がかかります)。基本的:
- Python スクリプトを実行 -> precompiled.h が更新される場合があります
- precompiled.h タイムスタンプを調べて、それが新しい場合 -> precompiled.h.gch をビルドします
- 標準のコンパイル手順
私は多くの場所を見てきましたが、依存関係を計算するcmake(およびmake)の方法は、このタスクを達成するには弱すぎるようです。
この質問 では、lazycpp が実行された後に常に遅延 C++コンパイルが発生します。私の場合、これは最適ではありません。