1

(序文として、これは風変わりであり、標準的な C++ の慣行ではないことを認識していますが、私の目的には合っています。)

テンプレートを多用するため、基本的にすべてヘッダー ファイルである C++ ライブラリがあります。ほとんどすべてのヘッダー ファイルには、1 つのクラス定義 ("ButterworthFilter.h"、"Interpolator.h" など) が含まれています。ライブラリ全体を使用せずに別のプロジェクトに簡単に転送できるように、これらの各クラスの 2 番目の「スタンドアロン」バージョンが存在するようにしたいと考えています。したがって、基本的にこれの手動バージョンは、各ヘッダーに移動し、#include の依存関係を確認し、それらの含まれているクラスを元のファイルに #include されている上部にコピー/貼り付けることです。これに関する問題は、元のファイルのいずれかに変更が加えられるたびにこれを変更する必要があるため、更新が行われるたびにプログラムで行う必要があることです。

コンパイラに各依存ファイルの内容全体を出力させる方法はありますか? たとえば、ButterworthFilter.h の依存関係を出力するようにコンパイラーに指示すると、コンパイラーは #includes をチェックし、Filter.h に依存していることを確認し、Filter.h のすべて (およびその依存関係を再帰的に) を出力します。このようなライブラリを操作するために実際に作成されたプログラムの方がさらに良いでしょう。ライブラリ内に埋もれている有用なクラスのスタンドアロン バージョンを生成できるツールがあれば素晴らしいと思います。

とにかく、この質問が理にかなっていることを願っています。事前に感謝します。

4

2 に答える 2

2

コンパイラを使用して、前処理の結果を書き込むことができます。通常、この-Eオプションを使用して、ファイルの前処理の結果を取得します。処理されたファイルには、元のファイルの行番号と指示が含まれる傾向があります。これらを削除することをお勧めします。もちろん、これはマクロも展開しますが、インクルードガードを超えて、とにかくマクロを使用しないことを願っています...

于 2012-11-02T21:33:22.363 に答える
0

あなたは正しい方向を見ました: http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

make に適したルールを生成する -M オプションがあります。つまり、すべての依存ファイルがリストされます。これはすべてのヘッダー ファイルです。ヘッダーが変更された場合、オブジェクト ファイルを再コンパイルする必要があることを make が認識できます。-MF オプションとともに使用します。

gcc ドキュメントから:

-M
前処理の結果を出力する代わりに、適切なルールを出力する
メイン ソース ファイルの依存関係を記述する make 用。
プリプロセッサは、オブジェクト ファイル名を含む 1 つの make 規則を出力します。
そのソース ファイル、コロン、および含まれるすべてのファイルの名前については、
-include または -imacros コマンド ライン オプションからのものを含みます。
...

このオプションは、-dM などのプリプロセッサのデバッグ出力を抑制しません。
このようなデバッグ出力と依存関係ルールを混在させないようにするには、明示的に行う必要があります
-MF で依存関係の出力ファイルを指定し、
または、DEPENDENCIES_OUTPUT などの環境変数を使用します...

于 2012-11-05T20:57:40.903 に答える