1

gccでコンパイルされたいくつかのCプログラムで利用できるようにしたいプリプロセッサ定義のかなり長いリストがあります。

基本的に、-DDEF1 = 1 -DDEF2 = 2 ...オプションの膨大なリストを作成してgccに渡すことができますが、それは膨大な混乱を引き起こし、バージョン管理システムで使用するのが難しく、将来のある時点で使用される可能性がありますコマンドラインの長さの制限を破ります。

自分の定義をファイルで定義したいと思います。

基本的に、-imacrosは、最初のソースファイルにのみ渡すことを除いて、私が望むことを実行します:(以下のgccドキュメントから):

-include file#include"file"がプライマリソースファイルの最初の行として表示されたかのようにファイルを処理します。ただし、ファイルを検索する最初のディレクトリは、メインのソースファイルを含むディレクトリではなく、プリプロセッサの作業ディレクトリです。そこに見つからない場合は、通常どおり#include"..."検索チェーンの残りの部分で検索されます。複数の-includeオプションが指定されている場合、ファイルはコマンドラインに表示される順序で含まれます。

-imacros file -includeとまったく同じですが、ファイルのスキャンによって生成された出力がすべて破棄される点が異なります。それが定義するマクロは定義されたままです。これにより、宣言を処理せずに、ヘッダーからすべてのマクロを取得できます。-imacrosで指定されたすべてのファイルは、-includeで指定されたすべてのファイルの前に処理されます。

最初のファイルだけでなく、すべてのソースファイルで定義を利用できるようにする必要があります。

4

2 に答える 2

2

このリファレンスの下部を見てください。

あなたが望むかもしれないのは@fileオプションです。fileこのオプションは、コマンドラインオプションに使用するようにGCCに指示します。もちろん、このファイルにはプリプロセッサ定義を含めることができます。

于 2013-03-26T15:21:13.487 に答える
0

正直なところ、ビルド環境でもう少し行う必要があるようです。

たとえば、1つの提案は、すべてのソースファイルに含まれるヘッダーファイルを作成し、すべての定義を#defineする必要があるように思われることです。

を使用することもでき-includeますが、明示的なパスを指定します。これは、Makefile/ビルド環境で決定する必要があります。

Makefileが各ソースファイルを個別に構築している場合、-imacrosは独自のオブジェクトファイル(一般的)に機能します。すべてのソースを1つのオブジェクトの構築に投入しているように聞こえます。

于 2013-03-26T15:25:29.440 に答える