2013-08-21 21 views

回答

19

答案很簡單。

eclipse cdt生成器會在解析符號時忽略用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 
調用cmake的

從命令行生成項目文件時添加-DCMAKE_CXX_COMPILER_ARG1 = -std = C++ 11

在打開配置或第一次生成之前,先設置CMAKE_CXX_COMPILER_ARG1!

就是這樣。該項目將生成正確的符號。索引器,語法高亮和自動完成應該按預期工作,而無需手動更改任何項目設置。

+0

它沒有爲我工作。我正在使用cmake 3.5.1和eclipse Kepler.I仍然必須做這裏第二點要做的事情(https://stackoverflow.com/a/14381512/1971003) - 我在這裏錯過的任何東西?謝謝 !! –

3

在cmake的3.1版本中引入了一個新的變量CMAKE_CXX_STANDARD,它可以激活C++ 11的支持。嘗試這樣的:

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

這似乎進行到生成的Eclipse項目。我試用了verison 3.2.0-rc2,並且Eclipse識別了像std :: shared_ptr <>這樣的C++ 11功能。

一些文檔鏈接:

+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時設置。

Recommodation適當的cmake invokation的:cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_FLAGS="-std=c++11"(或者具有例如替換c++11c++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