2016-07-24 7 views
0

マクロをデバッグするとき、私は現在を検出、すなわちGCC -E

cc -E -DPREPROCESSING ... 

として打ち鳴らすまたはGCCを呼び出します。

定義が冗長であることが私には発生しました。コンパイラが前処理後に停止することを検出するためにソースに書き込むことができる式があるので、ビルドスクリプトからこの定義を削除しますか?

#if magic 
#define PREPROCESSING 
#ending 

ドキュメントを見てもわかりませんが、運があれば何か不足しています。

+0

これは非常に一般的な価値を持っていないと、ビルドのバグを導入する持ちます。ビルド・システムは、別のステップとして前処理を選択し、コンパイラーを複数回呼び出すことができます。この機能が存在する場合、前処理と別々のコンパイル(クロスプラットフォーム並列ビルドのパフォーマンスを向上させるなど)は、前処理や単一実行でのコンパイルとは異なる出力を生成します。それは非常に驚くばかりでバグのある行動になります。この場合、プリコンパイルされたヘッダをどのように処理しますか? –

答えて

1

Cの標準には別の前処理については何も言及していないので、あなたが思いつく解決策はコンパイラ固有のものになります。 GCCで

は、カスタム仕様のファイルを追加することで魔法を実現することができます。

%rename cpp old_cpp 
*cpp: 
%{E:-DPREPROCESSING} %(old_cpp) 
あなたは上記を使用して独自のgccでコンパイルしない限り、あなたはこのspecファイル( -specs=/path/to/specfile)を、使用するGCCを指示する必要があります

内蔵のcpp仕様に定義が追加されました。 Makefileを使用している場合は、CFLAGSに上記の-specsオプションを追加することができます。

(私は、これは特に良いアイデアだとは思わない。しかし、それは可能であることを追加する必要があります。)

+0

私はspecファイルについて知らなかった。私はポイントフィックスを望んでおり、あなたは一般的な仕組みを提供しました。すごくいい、ありがとう –

関連する問題