我知道您可以使用此处描述的GXX_EXPERIMENTAL hack启用正确的语法突出显示: Eclipse CDT indexer does not know C++11 containers
但我认为,在使用cmake生成项目时,根本不需要触摸项目设置。
因此。有更简单的解决方案吗?
答案 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;。
一些文档链接: