2012-01-28 20 views
1

Ubuntuでコンパイラg ++ 4.6を使用してC++共有ライブラリプロジェクトを作成しました。
依存ライブラリの一部は、しかしEclipseのは自動的にそれらを定義していないいくつかのプリプロセッサは Eclipse Indigo C++プロジェクト設定

#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__) 

のように、コンパイラ、適切にコンパイルするオペレーティングシステムに関する
コマンドを見込んで(私が使用している、少なくともバージョン)私のためにこれを行うEclipseに設定やオプションがありますか?

答えて

2

プロジェクトプロパティでプリプロセッサ定義を設定できます。。

しかし、あなたのケースでは、これらはプロジェクト固有ではないので(コンパイラ固有のため)、私はこれらを使用しません。私は実際にあなたがこれらを探していると思う。私はllvm/clangについてはわかりませんが(今は覚えていませんが)、GCCの場合は、それを心配することなく、コンパイラ自身によって定義されるマクロ__GNUC__を使うべきです。 。先頭のアンダースコアは、それらが標準の一部ではなく、別のコンパイラ(たとえばMSVC)を使用するときに必ずしも定義されているわけではないことを伝えます。

vsprintf_sのクロスプラットフォームの使用方法について

// this will be set on Visual Studio only, so this code is added for all other compilers 
#ifndef _MSC_VER 
#define vsprintf_s(b,l,f,v) vsprintf(b,f,v); 
#endif 

しかし、一般的には、すべてのプラットフォーム上で利用可能な機能を使用しようとする(この例では、このような場合には代わりにvsnprintf()を使用します)。

+0

私のプロジェクトvsprintf_sこの関数はマイクロソフトの実装ですが、eclipseはプリプロセッサコマンドを自動的には追加しません。手動で追加する必要はありません。結果として、私はこのコンパイラエラーで終わります: "glm/core /.././ gtx/string_cast.inl:26:30:error: 'vsprintf_s'はこのスコープで宣言されませんでした。依存関係ライブラリを適切にセットアップします。ここに私のセットアップファイルへのリンクhttp://glm.g-truc.net/api-0.9.0/a00076_source.html – Cihan

+0

私はまたこれを追加したかった: /* echo "" | g ++ -E -dM -x C++ - |ソート*/ このコマンドをコンソールに書き込むと、Marioが言ったようにコンパイラによって自動的に定義されたプリプロセッサコマンドが表示されます。私はエラーの私のソースが何か他のプリプロセッサコマンドであると信じています。 – Cihan

+0

'_s'後置の標準関数は、MSVCのみの追加で、バッファオーバーランに対してより多くの保存を行います。単純な「互換性の定義」をヘッダファイルに追加してください(私は上記の短い例を追加します)。 – Mario

関連する問題