使用cmake生成项目时,Eclipse索引器正确的c ++ 11语法突出显示

时间:2013-08-21 13:10:38

标签: c++ c++11 cmake mingw eclipse-cdt

我知道您可以使用此处描述的GXX_EXPERIMENTAL hack启用正确的语法突出显示: Eclipse CDT indexer does not know C++11 containers

但我认为,在使用cmake生成项目时,根本不需要触摸项目设置。

因此。有更简单的解决方案吗?

3 个答案:

答案 0 :(得分:22)

答案很简单。

eclipse cdt生成器在解析符号时忽略add_definitions(...)添加的定义。相反,它使用CMAKE_CXX_COMPILER_ARG1。 所以你要做的就是:在调用cmake时添加-DCMAKE_CXX_COMPILER_ARG1 = -std = c ++ 11

从命令行生成项目文件:

cmake ../../src -G"Eclipse CDT4 - MinGW Makefiles" -DCMAKE_ECLIPSE_VERSION=4.2 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_ARG1=-std=c++11

从cmake gui生成项目:

- 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_CXX_COMPILER_ARG1非常重要!

就是这样。将使用正确的符号生成项目。索引器,语法高亮和自动完成应该按预期工作,而无需手动更改任何项目设置。

答案 1 :(得分:4)

如前所述,项目生成器的调用在解析CMakeLists.txt之前运行 。 因此,CMakeLists.txt内的任何定义都不会对生成的项目文件产生任何影响。

如果生成eclipse项目,则在CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake内请求编译器的功能。 在行23中,解析变量CMAKE_CXX_FLAGS,该行在30行中进行求值。 特别是 CMAKE_CXX_FLAGS变量只能在从命令行调用cmake时设置。

推荐适当的cmake invokation cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_FLAGS="-std=c++11"(或用例如c++11或您喜欢的任何其他标准替换c++14

<强>提示: 通过运行以下命令可以看出评估行30的结果:touch /tmp/dummy; /usr/bin/c++ -v -E -x c++ -std=c++11 -dD /tmp/dummy。它输出编译器中的所有定义,这些定义被解析为eclipse项目:

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

答案 2 :(得分: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&lt;&gt;。

一些文档链接: