【问题标题】:Importing a CMake project into Eclipse CDT将 CMake 项目导入 Eclipse CDT
【发布时间】:2012-07-23 15:20:40
【问题描述】:

我有一个原生的CMake 项目,我想将Eclipse IDE 与它一起使用,以便通过提供自动完成和其他功能使我的开发更容易。我似乎找不到如何在 Eclipse 中导入 CMake 项目。

PS:我愿意为其他与 CMake 配合良好的 IDE 提供建议。

【问题讨论】:

    标签: linux eclipse cmake


    【解决方案1】:

    KDevelop 是一个很棒的 IDE,具有出色的 CMake 支持。

    至于 Eclipse - 运行这个:

    cd <project_dir>
    cmake -G "Eclipse CDT4 - Unix Makefiles" ./
    

    这将为您生成 Eclipse 项目。

    【讨论】:

    • 请注意,您确实应该使用单独的目录进行构建,但这会起作用。
    • 在我的例子中,它只创建了 CMakeFiles 目录、CMakeCache.txt 和 cmake_install.cmake。 :/ 我还在 cmake.org 上使用过教程,结果相同。问题可能是我的 cmake 文件在同一解决方案下定义了两个不同的项目吗?你认为这可能是原因吗?
    • “显示隐藏文件”是我的问题:)
    • 请注意,CMake 的 CDT 项目生成器显然不再维护,请参阅下面的答案以获取替代方案(Eclipse 开发人员向我建议)。
    • 我尝试了好几天让 Eclipse 和 CMake 像我想要的那样工作。刚刚尝试了KDevelop,它给人留下了很好的第一印象!导入和构建就像一个魅力
    【解决方案2】:

    详述箭头对 Eclipse 的回答:

    首先,为 CMake 文件选择一个目录。我更喜欢将我的 Eclipse 工作区保存在 ~/workspaces 中,并将源代码保存在 ~/src 中。我需要构建或测试项目的数据位于项目工作区目录的子目录中,因此我建议对 CMake 执行相同操作。

    假设您的工作区和源文件夹都命名为someproject,请执行以下操作:

    cd ~/workspaces/someproject
    mkdir cmake
    cd cmake
    cmake -G "Eclipse CDT4 - Unix Makefiles" ~/src/someproject
    

    然后,在您的 Eclipse 工作区中,执行:

    文件 > 导入... > 常规 > 现有项目到工作区

    勾选选择根目录并选择~/workspaces/someproject/cmake。确保未选中Copy projects into workspace

    单击完成,您的工作区中就有了一个 CMake 项目。

    需要注意的两点:

    • 我使用cmake 作为工作区子目录,但您可以使用自己选择的名称。
    • 如果您对构建配置进行了任何更改(例如编辑 Makefile.am),则需要重新运行最后一条命令,以便 Eclipse 获取更改。

    【讨论】:

      【解决方案3】:

      我刚刚了解到 CMake 的 CDT 项目生成器 appears to be unmaintained 并引起了各种问题 — 尤其是似乎在 Eclipse 的更高版本(我也分享过)中。

      建议使用 cmake4eclipse(可从 Eclipse Marketplace 获得),它使用CMakeLists.txt 作为其唯一的真实来源。它还允许您将源代码树与您的工作区分开。

      • 在 Eclipse 中,选择 文件 > 新建 > C 项目
      • 输入项目名称并选择源代码树的根目录作为项目位置。
      • 选择Executable > Empty Project作为项目类型,并接受默认工具链。
      • 点击完成,您的工作区中就有了一个 CMake 项目。

      【讨论】:

      • 项目生成器对我也不起作用,但它起作用了!
      • 我试过这个,但 Eclipse 无法识别我在 CMakeLists.txt 中设置的标志,即:set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMYVAR=5") Eclipse 错误:符号 'MYVAR'无法解决任何想法如何解决这个问题?顺便说一句,我尝试使用带有“CMake Tools”扩展名的 VS Code - 同样的错误......
      【解决方案4】:

      简而言之,目前只有 CDT 生成器是可行的选择。为什么?仅仅是因为 Eclipse 必须从某个地方获取预处理器定义、包含路径以及构建中包含的文件。否则,我们最终会索引所有内容,而且很糟糕,没有定义正确的宏。如果您的 repo 或中型或大型树有提升,那么索引所有内容在现实世界中根本无法正常工作 - 无论如何,Eclipse 索引器的速度和可靠性都不会。由于现在大多数人可能都想使用 Ninja 进行构建(谁想等待 30 多秒来进行热构建只是为了看看什么是脏的?),这排除了通过当前支持的 makefile 导入此信息的唯一方法,除非您希望每次配置时都必须生成两个单独的构建系统,否则自动化将变得非常痛苦(假设 cmake 在列表更改时会重新运行)。

      在 Eclipse Photon 中有一个直接导入 cmake 项目的新选项。然而,在这个阶段,我想说它对于除了琐碎的项目之外的任何东西看起来几乎没有用,因为似乎没有任何方法可以导入已经配置的构建目录,或者任何地方来设置传递给的变量和参数制作。 我还不知道这个功能实际上是如何工作的,但似乎 Eclipse 必须通过 CMakeLists 的层次结构进行解析,按照逻辑查看进行了哪些 add_subdirectory() 调用,以及设置了哪些预处理器定义,这似乎是一种没有未来的方法,因为我们有 cmake 服务器模式来解决这个问题,毫无疑问,它需要在 Eclipse 中重新实现几乎所有的 cmake 语言解析器来完成这项工作。

      到目前为止,似乎满足实际需求的唯一可行解决方案似乎是使用 cmake CDT 生成器。它可以直接从cmake内部获取上述信息,并将其写入.cproject文件。如前所述,它并没有真正维护,并且依赖于 .cproject 的过时模板,这会导致一些问题。

      我自己对 cmake 支持的最低要求是:

      • 能够导入已配置的项目。大型构建系统通常使用脚本在命令行上将大量变量传递给 cmake。
      • 只有构建系统的一部分应该被索引。
      • 它必须与源代码树之外的构建一起使用。
      • 必须使用预处理器定义和包含来自构建系统的路径才能进行有效的索引。
      • 必须使用 Ninja 生成器(即不生成任何 makefile)。

      目前,除了 CDT 生成器之外,我无法看到如何使用任何上述方法执行上述任何操作,而实现有效且完善的解决方案的唯一方法需要对 cmake 的生成器进行一些黑客攻击,或者对生成的 . cproject 对索引的内容有选择性(即不是所有的 CMAKE_SOURCE_DIRECTORY)。这是另一个 hack(因为 cmake 没有任何方法将配置后的任务附加到配置步骤中,我们必须分叉一个进程,并监视父 cmake 的终止。这是代表 cmake 的深思熟虑的决定开发人员显然,也许是正确的)

      我当然非常感谢任何更好方法的信息。对于一个应该用于 C++ 开发的工具来说,Eclipse 中对 cmake 的支持状态相当糟糕。索引器(至少当它没有被需要重新启动 Eclipse 的常规锁定所困扰时)实际上是最好的,而 Eclipse 是一个非常好的代码跳转环境。

      【讨论】:

        【解决方案5】:

        执行以下操作:

        mkdir debug(或发布,或任何其他名称)

        cd debug
        cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE -DCMAKE_ECLIPSE_MAKE_ARGUMENTS=-j3 -DCMAKE_ECLIPSE_VERSION=4.1 ../
        

        确保设置正确的 Eclipse 版本

        然后从 Eclipse(打开项目)打开文件夹

        【讨论】:

          【解决方案6】:

          我桌面上的一个简单解决方案:

          1. 在 Eclipse 中:New -&gt; New C/C++ Project -&gt; Empty or Existing CMake Project,选择一个项目名称(例如项目)。
          2. 将旧目录的所有文件复制到新目录(项目路径)。

          【讨论】:

            猜你喜欢
            • 2011-10-21
            • 2014-02-14
            • 2019-04-26
            • 1970-01-01
            • 1970-01-01
            • 2010-10-27
            • 2016-11-04
            • 2011-09-28
            • 1970-01-01
            相关资源
            最近更新 更多