リンク可能な静的ライブラリまたは共有ライブラリにコンパイルされた、ヘッダーとソースファイルで構成されたCまたはC++ライブラリを使用するとします。
ライブラリのヘッダー(数十...または数百のファイル)には、いくつかのマクロ/シンボルが定義されています。
ここで、このライブラリをプロジェクトで使用したいと思います。このライブラリは、いくつかのマクロとシンボルも定義しています。もちろん、名前の衝突は避けたいと思います。これは、特にwindows.hで報告されることがあるためです。しかし、より一般的には、そのヘッダーから実際にエクスポートされるものを制御し続けたいと思います。
gccプリプロセッサオプションを使用して、定義されたシンボルのリストを作成できます。
gcc -E -dM include/great_lib.h | sort -V >symbols.txt
これにより、ファイルsymbols.txtに、このヘッダーが含まれている場合にユーザーファイルに含まれるすべての定義済みシンボルのソート済みリストが出力されます。
ただし、シンボルのみが表示され、定義されたファイルは表示されません。
役に立つ情報になると思います。たとえば、一部のシステムマクロが「great_lib.h」またはそのアセンダントで再定義されているかどうかを確認します。残念ながら、gccプリプロセッサオプションをチェックした後、gccを使用してそれを行う方法がわかりません。
たとえば、私に与えるだけでなく、次のようになります。
#define M_PI 3.14159265358979323846
それは生成します
#define M_PI 3.14159265358979323846; /usr/include/math.h
たぶん-dNオプションで何か?しかし、その出力は私にとって混乱を招き、さらにテキスト処理が必要であり、情報がどのように階層化されているのか理解できません。またはもっと簡単な方法ですか?
関連する質問: