2012-03-14 115 views
3

私はVisual Studioで作業しますが、私のプロジェクトはPOSIXベースの環境(marmalade sdk)用です。このプロジェクトでは、リリース ビルドはARM用gccでコンパイルされますが、デバッグバージョンはウィンドウで動作し、MSコンパイラによってコンパイルされます。また、この環境には、独自のSTLおよびその他の標準ライブラリが実装されています。_MSC_VERの定義を解除する方法は?

これらのC++ libraresの多くは、このようなコードを持っている:

#if defined(_MSC_VER) 
    #include <Windows.h> 
#else 
    #include <pthread.h> 
#endif 

は_MSC_VERマクロを未定義することが可能ですか? - C++ライブラリがここでPOSIXシステムを検出するようにします。

+1

'_MSC_VER'のみが定義されます。他のコンパイラを使用する場合、定義されません。 –

+0

はい、Visual StudioのC++コンパイラでコンパイルしますが、enviroumentはWindows.hのようなWindowsのlibraresを使用しません。どのようにstandartのWindows環境ではないコンパイラに伝えるために私のqestion。 – strobe

+1

'_WIN32'のようなビルドベースの定義を使う方が良いかもしれませんが、' _MSC_VER'はコンパイラ組み込み関数として定義不可能になる可能性がほとんどあります。 – Necrolis

答えて

2
もちろん

:あなたは_MSC_VERが使用されているファイルを含める前に

#undef _MSC_VER 

#if defined(_MSC_VER) 
    #include <Windows.h> 
#else 
    #include <pthread.h> 
#endif 

かは、それを#undefの。

+0

ありがとう。私はグローバルなプロジェクトレベルでそれを未定義にしようとしましたが、これは結果をもたらしません。 – strobe

+1

@strobe:abc.hファイルに '#if defined(_MSC_VER)'とabc.cpp #includes abc.hが含まれている場合は、 '#undef _MSC_VER'と' #include abc.h'を試してください。 – Donotalo

4

_MSC_VERは、「コンパイラのバージョン番号のメジャー番号とマイナー番号の要素を評価する」ように、Microsoftコンパイラでコンパイルするときに定義されています。したがって、Windows環境の違いにかかわらず、常にコンパイラの値に定義されるため、コードは間違ったマクロテストを使用しています。

_MSC_VERの定義を破棄するのではなく(コードが実際にコンパイラのバージョンを知りたい場合は他の問題につながる可能性があります)、実際には代わりに行うべきことは、より適切なマクロテストがこれは、遭遇する可能性のあるWindows環境の種類を区別するために使用されます。

ここでは、あらかじめ定義されているマクロの完全なリストを参照してください。あなたは、例えば、someOtherConditionGoesHere

の#if ...

を条件に取って代わる...または追加の条件でそれを拡張することができどちらか

http://msdn.microsoft.com/en-us/library/vstudio/b0084kay.aspx

Visual StudioのC++コンパイラでコンパイルするとき

の#if定義された(_MSC_VER)& & someOtherConditionGoesHere

関連する問題