Eclipse CDT Oxygen:编译器问题

Eclipse CDT Oxygen: Compiler issue

我是 运行 Ubuntu 16.04,刚刚第一次打开我新安装的 Eclipse CDT Oxygen。

我导入了一个现有的 C++ 项目,该项目使用设置 add_definitions(-std=c++11).

的 CMake 文件构建良好

我使用 CMake 和命令 cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../src/ 生成 Eclipse 项目文件,然后使用这些文件将项目导入 Eclipse。

现在我在 Eclipse 中查看我新导入的项目中的源文件,发现了很多问题。都是不能解析的类型,比如std::default_random_engine.

我的猜测是 Eclipse 没有配置正确的工具链。

我有几个问题:

  1. 如何查看项目的工具链以及如何更改它?我查阅了 this 帮助文章,但我看到的项目属性菜单中的部分与帮助文章中的部分不一样。我看到的项目属性菜单没有 "C/C++ Build" 部分。怎么可能?

  2. 我用来生成Eclipse项目文件的CMake文件指定应该使用C++11,那为什么不是这样呢?

这是我的项目属性菜单的样子:

这是我的 .project 文件的样子:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>particle_filter</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
            <triggers>clean,full,incremental,</triggers>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
            <triggers>full,incremental,</triggers>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.cdt.core.cnature</nature>
        <nature>org.eclipse.cdt.core.ccnature</nature>
        <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
        <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
    </natures>
</projectDescription>

非常感谢!

缺失C/C++构建部分可能是由于损坏.project.cproject.settings/language.settings.xml 文件:

  1. 创建一个相同类型的新项目
  2. Navigator 视图中 比较 .project, .cproject.settings/language.settings.xml文件对应的文件新项目找到问题(确保在.cproject.settings/language.settings.xml中使用相同的ID,但与其他项目中的ID不同)

我认为 CMake 的 CDT 项目生成器相当过时,并且没有正确配置生成的项目以支持 C++11。

我推荐使用以下方法来配置 C++11 支持:

  • 转到 Project Properties | C/C++ General | Preprocessor Include Paths
  • Providers 选项卡中,select CDT GCC Built-in Compiler Settings
  • (如有必要,取消选中 "Use global provider shared between projects"。)
  • -std=c++11 添加到 "Command to get compiler specs"。
  • 应用并重建项目的索引。

执行此操作后,C++11 符号应正确解析。