2013-08-21 4 views
10

でプロジェクトを生成するとき、私はあなたがハックここで説明GXX_EXPERIMENTALと強調し、適切な構文を有効にすることができます知っているの強調表示: Eclipse CDT indexer does not know C++11 containersEclipseのインデクサ適切なC++は11構文cmakeの

は、しかし、私が思うに、cmakeのでプロジェクトを生成するとき、1がすべきプロジェクト設定にまったく触れる必要はありません。

So.よりシンプルなソリューションはありますか?

答えて

19

答えはかなりシンプルです。

eclipse cdt generatorは、シンボルの解析時にadd_definitions(...)で追加された定義を無視します。代わりに、CMAKE_CXX_COMPILER_ARG1を使用します。 だから、あなたがしなければならないすべては、次のとおりです。

cmakeのGUIからプロジェクトを生成
cmake ../../src -G"Eclipse CDT4 - MinGW Makefiles" -DCMAKE_ECLIPSE_VERSION=4.2 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_ARG1=-std=c++11 

- Select source and build directory. 
- now BEFORE hitting configure or generate. Press "Add Entry" and add a new entry. Name:CMAKE_CXX_COMPILER_ARG1 Type:STRING Value:-std=c++11 
- press Generate and create the Eclipse project 
を-DCMAKE_CXX_COMPILER_ARG1 = -std = C++ 11コマンドラインからcmakeの

生成プロジェクトファイルを呼び出す際の追加

初めてCMAKE_CXX_COMPILER_ARG1を設定する前に、configureを実行するか、初めて生成することが重要です。

それです。プロジェクトは正しいシンボルで生成されます。インデクサ、構文強調表示、オートコンプリートは、プロジェクト設定を手作業で変更することなく、意図どおりに動作するはずです。

+0

これは私のためには機能しませんでした。私はcmake 3.5.1とeclipse Keplerを使用しています。私はまだここで2番目のことを示唆しています(https://stackoverflow.com/a/14381512/1971003) - 私はここで紛失しているものは何ですか?ありがとう!! –

3

cmakeのバージョン3.1では、C++ 11のサポートを有効にする新しい変数CMAKE_CXX_STANDARDが導入されました。

cmake ../../src -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_STANDARD=11 

これは生成されたEclipseプロジェクトに伝わると思われます。私はverison 3.2.0-rc2でそれを試して、EclipseはC++ 11の機能(std :: shared_ptr <など)を認識しました。

いくつかのドキュメントへのリンク:

+1

いいえ、私はCMake 3.2.1でCMAKE_CXX_STANDARD = 14を設定しようとしました。 GCCは標準をgnu ++ 14に設定していますが、Eclipseはそうしていません。 –

+0

'cmake -G" Eclipse CDT4 - Unix Makefiles "-DCMAKE_CXX_FLAGS =" - std = C++ 14 "を試してください。 – Tik0

4

すでに述べたように、プロジェクトジェネレータの呼び出しは前に解析を実行するとCMakeLists.txtの したがって、CMakeLists.txtの内部の定義は、生成されたプロジェクトファイルに影響を与えません。

eclipse-project生成の場合、コンパイラの機能はCMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmakeの中で要求されます。 行23で変数CMAKE_CXX_FLAGSが解析され、行30で評価されます。 特にCMAKE_CXX_FLAGS変数は、コマンドラインからcmakeを呼び出している間のみ設定できます。

適切なcmake呼び出しを受け取ります。cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_FLAGS="-std=c++11"(または、たとえば、c++11と置き換えてください。c++14またはあなたが好きな他の標準)

ヒント:touch /tmp/dummy; /usr/bin/c++ -v -E -x c++ -std=c++11 -dD /tmp/dummy ライン30を評価した結果を例として、以下のコマンドを実行しているから見ることができます。これは、コンパイラからのすべての定義をeclipse-projectに解析して出力します。

... 
#define __STDC__ 1 
#define __cplusplus 201103L 
... 
+1

Eclipse 4.5、cmake 3.7.2、TDM-GCC 5.1を使用してくれました。 – gurka