gccでコンパイルされたいくつかのCプログラムで利用できるようにしたいプリプロセッサ定義のかなり長いリストがあります。
基本的に、-DDEF1 = 1 -DDEF2 = 2 ...オプションの膨大なリストを作成してgccに渡すことができますが、それは膨大な混乱を引き起こし、バージョン管理システムで使用するのが難しく、将来のある時点で使用される可能性がありますコマンドラインの長さの制限を破ります。
自分の定義をファイルで定義したいと思います。
基本的に、-imacrosは、最初のソースファイルにのみ渡すことを除いて、私が望むことを実行します:(以下のgccドキュメントから):
-include file#include"file"がプライマリソースファイルの最初の行として表示されたかのようにファイルを処理します。ただし、ファイルを検索する最初のディレクトリは、メインのソースファイルを含むディレクトリではなく、プリプロセッサの作業ディレクトリです。そこに見つからない場合は、通常どおり#include"..."検索チェーンの残りの部分で検索されます。複数の-includeオプションが指定されている場合、ファイルはコマンドラインに表示される順序で含まれます。
-imacros file -includeとまったく同じですが、ファイルのスキャンによって生成された出力がすべて破棄される点が異なります。それが定義するマクロは定義されたままです。これにより、宣言を処理せずに、ヘッダーからすべてのマクロを取得できます。-imacrosで指定されたすべてのファイルは、-includeで指定されたすべてのファイルの前に処理されます。
最初のファイルだけでなく、すべてのソースファイルで定義を利用できるようにする必要があります。