将CMake项目导入Eclipse CDT

时间:2012-07-25 08:26:35

标签: linux eclipse cmake

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

PS:我愿意接受其他适用于CMake的IDE的建议。

6 个答案:

答案 0 :(得分:36)

KDevelop是一个非常棒的IDE,具有很强的CMake支持。

至于Eclipse - 运行这个:

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

这将为您生成Eclipse项目。

答案 1 :(得分:22)

阐述了arrowd对Eclipse的回答:

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

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

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

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

档案&gt;导入...&gt;一般&gt;现有项目进入工作区

选中选择根目录,然后选择~/workspaces/someproject/cmake。确保未选中将项目复制到工作区

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

有两点需要注意:

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

答案 2 :(得分:3)

我刚学会了CMake的CDT项目生成器appears to be unmaintained并且引起了各种各样的问题 - 特别是,似乎是Eclipse的更高版本(我也有我的共享)。

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

  • 在Eclipse中,选择文件&gt;新&gt; C项目
  • 输入项目名称,并选择源树的根目录作为项目位置。
  • 选择可执行文件&gt;清空项目作为项目类型,并接受默认工具链。
  • 点击完成,您的工作区中有一个CMake项目。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

在Eclipse Photon中,有一个新选项可以直接导入cmake项目。但是,在此阶段,我想说的是,对于琐碎的项目而言,它看起来几乎毫无用处,因为似乎没有任何方法可以导入已经配置的构建目录,也无法在任何地方设置传递给变量的参数和参数。 cmake。 我尚不知道此功能的实际工作原理,但是看来Eclipse必须通过CMakeLists的层次结构进行解析,并遵循逻辑来了解进行了哪些add_subdirectory()调用以及设置了哪些预处理程序定义,这似乎鉴于我们完全可以使用cmake服务器模式来实现这一目标,因此这是没有前途的,毫无疑问,它将需要在Eclipse中重新实现几乎所有的cmake语言解析器,以使这项工作有效。

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

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

  • 能够导入已经配置的项目。大型构建系统通常使用脚本在命令行上将大量变量传递给cmake。
  • 仅应索引构建系统的一部分。
  • 它必须与非源树构建一起使用。
  • 必须使用预处理程序定义并包括从构建系统开始的路径,以进行有效的索引编制。
  • 必须与Ninja生成器一起使用(即,不生成任何makefile)。

除CDT生成器外,我看不到如何使用上述任何方法来实现上述目的,而实现可行且完善的解决方案的唯一方法是对cmake的生成器进行一些修改,或对生成的进行后处理。 cproject对于要建立索引的内容(即,并非全部CMAKE_SOURCE_DIRECTORY)具有选择性。这是另一种攻击(由于cmake无法将配置后的任务附加到configure步骤中,因此我们必须派生一个进程,并监视父cmake的终止。这是代表cmake的蓄意决策。开发人员,显然,也许是正确的)

对于任何更好的方法,我都非常感谢。对于应该用于C ++开发的工具,Eclipse中cmake支持的状态令人沮丧。索引器(至少在不受需要重新启动Eclipse的常规锁定困扰的情况下)实际上是最好的索引器,并且Eclipse是一个很好的代码跳转环境。

答案 5 :(得分:1)

执行以下操作:

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打开文件夹(打开项目)