2011-09-22 18 views
12

gccの特定のフラグを渡す必要がある従来のコードがあります。これらのフラグのプリプロセッサチェックを追加できますか? (上の指定されたものを上書き必要なフラグがない場合、コンパイルが失敗する

#ifndef _FNO_STRICT_ALIASING 
    #error -fno-strict-aliasing is required! 
#endif 
+0

make makeができるはずのような音がします。 –

+0

@ Code Monkey:もちろん、フラグはmakeで渡すことができます。しかし、ソースコードが知識を失う可能性のある新しいmakeシステムに移動した場合(たとえば、ソースをlibに配布している場合など)。コード自体に必要なものが分かってほしいです。それはそんなに乾燥しています。 :) – paleozogt

答えて

6

あなたはそのフラグを持つファイルをコンパイルする

#pragma GCC optimize "no-strict-aliasing" 

を使用することができます。

例えば、私はこのような何かを行うことができます、のは、私は-fno-strict-aliasingを必要としましょうコマンドライン)。 あなたはまた、少なくともGCCの私のバージョンに、間違いなくそれについて何の#defineありません

+0

ああ!私が求めていたものよりも優れています! – paleozogt

+0

実際に有効になるように、このフラグが必要な壊れたコードを修正することをお勧めします。 –

+0

ああ、no-strict-aliasingでプラグマを使用すると動作しません:https://bugzilla.redhat.com/ show_bug.cgi?id = 486176 – paleozogt

3

...ソースファイル内の単一の関数にフラグを適用する

__attribute__((optimize("no-strict-aliasing"))) 

を使用することができます。

すべての定義済みプリプロセッサシンボルを参照するには、次の

g++ -dM -E - < /dev/null 

私は、これらのオプションをテストするどのような方法があるとは思いません。ただし、GCC 4.4以降を使用している場合は、"optimize" function attributeまたは"optimize" #pragmaを使用して、機能ごとまたはファイルごとに特定のオプションを有効にすることができます。

#if defined(__GNUC__) 
#pragma GCC optimize ("no-strict-aliasing") 
#else 
#error "You are not using GCC" 
#endif 

...それはヘッダを含むすべてのファイルのオプションを有効にする必要があります:あなたは、共通のヘッダファイルにこれを追加した場合たとえば

、。

[更新]

OK、それは私にこの答えを構成するには長すぎる約10分かかったそう。とにかくGCCのドキュメントへのリンクのためにここに残すつもりです。

+1

ああ、no-strict-aliasingでプラグマを使うと動作しません:https://bugzilla.redhat.com/show_bug.cgi ?id = 486176 – paleozogt

関連する問題