【问题标题】:How to configure Eclipse CDT for cmake?如何为 cmake 配置 Eclipse CDT?
【发布时间】:2012-02-26 14:21:39
【问题描述】:

如何使用插件 CDT 为 cmake 配置 Eclipse "Helios"?

cmake all 
CMake Error: The source directory "D:/javaworkspace/workspace/Planner/Debug/all" does not    exist.

Eclipse 总是想使用“全部”选项,我不知道如何阻止它不使用它。

我在“构建行为”部分看到,在“首选项”中有“全部”选项。我删除了这个,但它仍然工作错误(同样的错误)。

【问题讨论】:

  • 你应该使用eclipse来生成CDT项目文件。这不是make 的替代品。

标签: cmake eclipse-cdt


【解决方案1】:

在 Eclipse-CDT 中,您不会创建 cmake 项目,而是导入 cmake 项目。 这是你应该做的:

  1. 说你名为“Planner”的CMake项目的源代码位于D:/javaworkspace/src/Planner

  2. 创建一个文件夹(文件夹需要相互平行):D:/javaworkspace/build/Planner

  3. 转到文件夹 D:/javaworkspace/build/Planner 并使用 Eclipse 生成器运行 CMake:

     cmake ../../src/Planner -G"Eclipse CDT4 - Unix Makefiles"
    

    这将为您的 Planner 项目生成 make 文件。

  4. 要在 Eclipse 中导入它,请执行以下操作:

    文件 -> 导入 -> C/C++ -> 现有代码作为 Makefile 项目

    并选择D:/javaworkspace/build/Planner(带有make文件的构建输出文件夹)作为“现有代码位置”

但是,看着您的路径,在我看来您是在 Windows 上工作。在 windows 中,CMake 可以生成 Visual Studio 项目。如果你想使用 CMake,我建议首先使用 CMake 创建一个“hello world”项目(记住,Eclipse 不会创建 CMake 项目,你必须手动创建一个 CMakeLists.txt 文件)

【讨论】:

  • 我不得不说这个解决方案非常适合我!对于尝试此解决方案的人,请逐步遵循。当您在 Eclipse 中加载项目时,您可以访问项目的“源目录”文件夹中的代码。使用 F3,我可以跳转到我的链接静态库中的类型声明(在遵循本教程之前我不能这样做)!注意,我使用的是 Ubuntu 12.04、Eclipse Juno (4.2) 和 CMake 2.8.7。非常感谢!
  • 不知何故,它总是归结为自己做事。鉴于此,我不妨继续使用像样的文本编辑器和命令行。
  • @jespestana 该解决方案确实有效(我的意思是,应用程序运行),但在导入项目后,eclipse 将所有包含标记为Unresolved inclusion [...]。奇怪的是,它也适用于#include <iostream>。你知道这个问题的解决方案吗?我现在应该包括一些图书馆吗? (我正在尝试使用 Eclipse 运行 PCL)。
  • @SzałPał 我停止使用 Eclipse。我目前使用 Qtcreator,它与 CMake 很好地集成。在 Qtcreator 中,只需转到文件>>打开文件或项目并打开 CMakeLists 文件。如果项目配置正确,那么它会打开它并完美配置它。在本网站查看“打开 CMake 项目”:stackoverflow.com/questions/9453851/…
【解决方案2】:

最适合我的是 cmake4eclipse。这是一个可通过市场获得的插件。

来自 cmake4eclipse 帮助文本的部分内容:

CMake for CDT 需要使用现有的 C/C++ 项目。它 允许使用 cmake 作为 makefile 的生成器,而不是 CDT 内置的生成器。请参阅启用 CMake 构建脚本生成 了解详情。

要使用现有源代码设置新项目,请按照以下步骤操作 步骤:

  • 查看您的源代码。
  • 打开新建 C/C++ 项目向导(“文件”=>“新建”=>“C 项目”或“文件”=>“新建”=>“C++ 项目”)。
    • 确保项目位置 指向已签出文件的根目录
    • 为项目 类型,选择可执行文件。您也可以选择共享库或静态 图书馆,没关系,信息来自您的 CMakeLists.txt,但 CDT 需要它。不要选择 Makefile 项目 在这里!
    • 完成项目创建。
  • 打开“项目属性”对话框。
    • 选择“C/C++ Build”节点和“Builder Settings”选项卡,确保 Generate Makefiles 自动检查。
    • 选择“工具链编辑器”节点并 将“CMake Make Builder”设置为当前构建器。
    • 如果您的顶级 CMakeLists.txt 不在您检查的根目录中 out 文件,选择“C/C++ General”“Path and Symbols”节点和 “源位置”选项卡。然后调整源文件夹指向 包含您的 CMakeLists.txt 文件的目录。这将告诉 CDT 索引器来扫描项目中的头文件。
  • 专业提示:在签出文件的根目录中添加 CMakeLists.txt 文件,如果您错过了 C/C++ 项目视图。构建项目。这将调用 cmake 如有必要,生成构建脚本,然后调用 make。

不要尝试导入您手动创建的 Eclipse 项目 使用 cmake -G Eclipse CDT4 - Unix Makefiles,因为这会让你 经典的 Makefile 项目路线!

这个插件最好的地方是它可以使用 cmake 导出的编译器选项来索引你的项目。

  • 打开“项目属性”对话框。
    • 选择“C/C++ General”节点和“Preprocessor Includes Paths, Macros etc.”标签。选择“CMAKE_EXPORT_COMPILE_COMMANDS Parser”并将其移至列表顶部。
    • 点击“确定”关闭对话框。确保立即触发一次构建并重新创建索引。

当我只使用“CDT GCC 内置编译器设置”并将“-std=c++14”之类的内容添加到“获取编译器规范的命令”时,这解决了所有烦人的索引器问题。

【讨论】:

  • 太棒了!我喜欢你的风格!
【解决方案3】:

在 Eclipse Makefile 项目中使用 CMAKE(在 win 上):

1) 使用现有代码创建新的“Makefile 项目

2)修改builder设置(Project Properties->C/C++ Build->Builder Settings):

  • 构建命令:cmd /c "mkdir ${PWD} & cd /D ${PWD} && ${CMAKE} -G "Unix Makefiles" ${ProjDirPath} && make "

  • 构建目录:${workspace_loc:/IoT_SDK}/build/${ConfigName}

就是这样!

【讨论】:

    【解决方案4】:

    除了接受的答案之外,您还应该指定 eclipse 版本。

    日食月神(4.4):

    cmake -G"Eclipse CDT4 - Unix Makefiles" -D_ECLIPSE_VERSION=4.4 ../../src/Planner
    

    Eclipse 开普勒 (4.3):

    cmake -G"Eclipse CDT4 - Unix Makefiles" -D_ECLIPSE_VERSION=4.3 ../../src/Planner
    

    【讨论】:

    • 指定eclipse版本有什么作用?我在 2.8.12 文档中找不到对 _ECLIPSE_VERSION 的任何提及...
    【解决方案5】:

    另一种完全不同的方法。

    • 手动创建一个空的 Eclipse 项目。

    • 通过项目属性 -> C/C++ 常规 -> 路径和符号 -> 源位置链接源目录。

    • 在 Debug 和 Release 构建目录中创建“Make Targets”(使用“Make Targets View”)。将“Make Target”字段留空,并将“command”字段设置为cmake -G "Unix Makefiles" <path/to/the/sources>

    • 当您双击您创建的“Make Target”时,它应该会在 Debug/Release 目录中触发 cmake 调用。

    • 在“项目属性 -> C/C++ 构建”中禁用内置 makefile 生成器。

    现在正常的构建应该可以工作了。它还将获取 CMakeLists.txt 文件中的任何更改(在 CMake 可以的范围内)。

    也许更详细的描述:https://stackoverflow.com/a/38140914/4742108

    【讨论】:

      【解决方案6】:

      我使用外部包含的任何方法都没有被索引。

      这是因为 CMAKE 使用了“响应文件”,它隐藏了这些文件中的所有包含,而是直接使用它 (-IPATH_TO_SOME_DIR)

      为了禁用“响应文件”,我使用了以下命令:

      SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES NO)
      SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES NO)
      

      为了强制 CMAKE 显示 gcc/g++ 执行,我已将 make 构建目标修改为 “所有详细信息 = 1”。请注意,使用 cmake4eclipse 时不需要这样做。

      我在 2018-12 (4.10.0) 版中有 Eclipse,CDT 在 9.6 版中。

      【讨论】:

        【解决方案7】:

        这是一个老问题,但值得更新。

        首先是制作cmake4eclipse的人将解析功能添加到CDT中。该功能/错误在 2020 年 8 月 5 日(2020 年 8 月 5 日)被标记为“已解决-已修复”,因此它应该会进入下个月发布的 Eclipse 版本。见:https://bugs.eclipse.org/bugs/show_bug.cgi?id=559674

        另外需要指出的是,你可以手动触发对文件的解析:

        配置选项/在编辑器中打开的索引源和头文件

        【讨论】:

          猜你喜欢
          • 2023-03-30
          • 2012-09-19
          • 2012-04-27
          • 2015-11-19
          • 2011-01-21
          • 1970-01-01
          • 2014-12-09
          • 1970-01-01
          • 2013-04-01
          相关资源
          最近更新 更多