C++ IDE for Linux?

209

我希望扩展我的编程技能到Linux上。一个好的、可靠的基础工具集非常重要,而什么比IDE更基础?

我找到这些SO主题:

我不想要一个轻量级IDE。如果一个IDE值得花钱购买,那我会付费,所以它不必是免费的。

我的问题是:

有哪些适用于Linux的好的、C++编程IDE可用?

最低要求是相当标准的:语法高亮、代码完成(如intellisense或其Eclipse对应项)和集成调试(例如基本断点)。

我自己做了搜索,但有太多了,几乎不可能手动分辨出好坏,特别是对于像我这样在Linux上没有多少C++编程经验的人。我知道Eclipse支持C++,我真的很喜欢那个IDE用于Java,但它对于C++有多好,还有更好的东西吗?

第二篇帖子实际上提供了一些不错的建议,但我错过的是,到底是什么使得所建议的IDE对用户如此出色,它的(缺)优点是什么?

也许我的问题应该是:

你推荐哪个IDE(基于你的经验),为什么?


在最新的版本中,Eclipse已经将http://www.eclipse.org/linuxtools/集成到其发布计划中 - 该项目旨在通过集成Linux特定工具,使Eclipse成为更完整的Linux C/C++ IDE。 - Jean Hominal
45个回答

258

起初:困惑

当我最初写这篇答案时,我刚从具有多年经验的Visual Studio转到Linux,并且我首先要做的是尝试找到一个合理的IDE。当时这是不可能的:没有好的IDE存在。

顿悟:UNIX就是一个IDE。所有的一切。1

然后我意识到,在Linux中,命令行及其工具就是IDE:

  • 首先,你需要设置你的shell
    • 在我的情况下是Bash,但很多人喜欢
    • fish 或者
    • (Oh My) Zsh
  • 和你的编辑器;选择你的毒药——两者都是最先进的:

根据你的需求,你将需要安装和配置几个插件,以使编辑器正常工作(这是唯一让人烦恼的部分)。例如,大多数使用Vim的程序员将受益于YouCompleteMe插件的智能自动完成。

一旦完成这些,Shell就是你与各种工具(调试器(gdb),分析器(gprof,valgrind)等)交互的命令接口。你可以使用MakeCMakeSnakeMake或其他各种替代品来设置项目/构建环境。你可以使用版本控制系统(大多数人使用Git)来管理代码。你还可以使用tmux(以前也可以使用screen)来复用(=思考多个窗口/选项卡/面板)和持久化终端会话。
重点是,由于Shell和一些工具编写约定,所有这些都相互集成。这样,Linux Shell是一个真正的集成开发环境,与其他现代IDE完全相当。(这并不意味着单独的IDE没有命令行可能缺少的功能,但反之亦然。)

因人而异

我无法过分强调一旦你养成了习惯,上述工作流程的功能是多么出色。但有些人只喜欢图形化编辑器,在这个答案最初编写的几年中,Linux已经为几种不同的编程语言获得了一套优秀的图形化IDE(但据我所知,并没有为C++提供)。即使像我一样最终没有使用它们,请尝试一下。以下只是一个小而有偏见的选择: 请记住,此列表远非完整。

1 我从dsm的评论中窃取了这个标题。

2 我过去常常提到Vim。虽然普通的Vim仍然非常强大,但Neovim是一个有前途的重启,并且它现代化了一些旧的缺陷。


223
我强烈不同意。无论你在做什么工作,一个良好的IDE都很重要。它可以极大地提高生产力。我使用CodeBlocks,并发现回到VI几乎是不可能的。我曾在Mac、Win和Linux上编码,虽然我觉得Visual Studio是最好的IDE,但CodeBlocks也很接近。 - DavidG
35
David,也许你可以详细说明一下(用自己的话……)我所描述的工具链中你到底缺少了什么,这些东西是集成开发环境(IDE)可以提供的。正如我所说,我曾经使用过很强大的IDE,并且我的生产效率增加与你的正好相反。 - Konrad Rudolph
48
Vim提供哪些重构支持?在Linux下运行的Eclipse中,我可以更改任何Java方法的名称,即使它在300个地方被调用。在Vim中能轻松完成吗? - quant_dev
25
重构需要以某种方式解析源代码。据我所知,没有任何VIM模块可以做到这一点,因此回答你的问题是“没有”。这是偏重于IDE(集成开发环境)语言比如Java的原因之一。由于即使在IDE中,C++ 的重构支持等都非常有限,所以这并不适用于C ++。 - Konrad Rudolph
11
@hasen:哦,但其中很大一部分可以。例如,范围感知重命名。相信我,这是很重要的。例如,Eclipse可以在这里节省很多工作。 - Konrad Rudolph
显示剩余43条评论

86

我个人最喜欢的是CodeLite 2.x集成开发环境。

请参见:http://www.codelite.org

选择使用CodeLite是基于对以下Linux C++ IDE的研究:

  • Eclipse Galileo with CDT Plugin
  • NetBeans 6.7(也是SunStudio IDE的基础)
  • KDevelop4
  • CodeBlocks 8.02
  • CodeLite 2.x

最终,我决定使用CodeLite 2.x

下面列出了有关上述C++ IDE的一些优缺点。请注意,这仅反映了我的个人观点!

编辑:很遗憾SOF不支持表格,所以我必须写成段落...

Eclipse Galileo with CDT Plugin

优点:

  • 相当快
  • 也支持Java,Perl(带E.P.I.C插件)
  • 常用且维护良好
  • 也可在其他操作系统上使用(Windows,MacOS,Solaris,AIX(?))

缺点:

  • GUI非常令人困惑且有些不一致 - 根本不直观
  • 体积庞大
  • 仅支持CVS(据我所知)

NetBeans 6.7(请注意,这也是SunStudio IDE的基础)

优点:

  • 我见过的最直观的GUI之一
  • 也支持Java,Python,Ruby
  • 集成CVS,SVN,Mercurial
  • 常用且维护良好
  • 也可在其他操作系统上使用(Windows,MacOS,Solaris)

缺点:

  • 极其缓慢
  • 体积庞大
  • 使用空格进行缩进,这不符合我的工作政策。我相信可以进行配置,但我找不到如何进行配置

KDevelop4(注意:我没有进行太多测试)

优点:

  • 在Linux上广泛使用
  • 集成了CVS、SVN、Mercurial

缺点:

  • GUI看起来有些老式
  • 重量级
  • 非常特定于KDE环境

CodeBlocks 8.02(注意:我没有进行太多测试)

优点:

  • 相当快速

缺点:

  • GUI看起来有些老式(虽然它有一个不错的启动屏幕)
  • 编辑器中的字体非常小
  • 一些图标(例如与调试器相关的图标开始/步进)非常小
  • 没有源代码控制集成

CodeLite 2.x(注意:这是我个人最喜欢的)

优点:

  • 我见过的在Linux上最好、现代化的、直观的GUI界面
  • 轻量级
  • 速度合理快
  • 集成SVN
  • 也可用于其他操作系统(Windows,MacOS,Solaris (?))

缺点:

  • 没有CVS集成(对我很重要,因为我必须在工作中使用它)
  • 不支持Java、Perl、Python(有这些功能会很不错)

14
Eclipse通过插件支持Hg、Git、SVN等版本控制工具。启动/闪屏界面会消耗大量资源,但收益甚微。并且通常会在等待应用程序加载时弹出,遮挡正在处理的内容。PortableApps和Eclipse需要取消这些界面。 - Chris K
4
Codelite在调试方面采用了与Visual Studio相同的键盘快捷方式,这对于使用Visual Studio习惯的用户非常友好。 - Raoul Supercopter
5
CodeLite 很棒,就像嚼Dentyne Ice口香糖一样。它会在你嘴里留下清新薄荷的味道。虽然 Eclipse 功能丰富,但使用它后也会让你感到恶心。我知道这听起来很幼稚,但这确实是最好的比喻来解释它们的“感觉”。我相信其他人也会同意我的看法。 - Didier A.
CodeLite 看起来现在支持 CVS:http://codelite.org/Main/ReadMore#toc9 - James Ko
糟糕的IDE,开箱即用无法工作。 - Pavel
显示剩余3条评论

75
  1. Code::Blocks
  2. Eclipse CDT

很快您会发现,仅使用集成开发环境 (IDE) 是不够的,您还必须学习 GCC 工具链(至少要学习基本功能也不难)。但使用 IDE 可以减轻过渡期的疼痛,在我看来没有坏处。


+1 给 CodeBlocks,是的,你肯定想学习至少如何从 shell 编译和运行程序,因为 CodeBlocks 有一些缺陷。 - Earlz
Code::Blocks无法解析C++语言。 - Johan Boulé
7
对于代码块和Eclipse,它们在调试期间都会改变其用户界面(UI),这通常会让新手感到迷失。它们都无法调试分支(fork),并且在与SVN/CVS集成时存在问题。设置源代码控制是一场噩梦,与这些IDE的集成同样困难。最新版本的Eclipse结合Subclipse在Gnome上存在问题,会在每10分钟崩溃。 - bleepzter
1
Mercurial,Git和Bazaar在各方面都大大优于其他工具。 - OneOfOne
Codeblocks在调试时无法正确观察变量值:一个体面的C++ IDE&调试器&编译器&代码静态分析器应该在调试时让您像JavaScript一样观察变量值(这在JavaScript和许多动态语言中非常酷,因为“eval”函数本身几乎就是一个调试器)。VisualC++的调试器几乎可以做到这一点,这就是为什么我认为它是首选的C++ IDE,而codeblocks&gcc&gdb则不行。VisualC++几乎是在Linux上安装VMWare和Windows的好理由。 - reuns
显示剩余3条评论

66

简短回答一下,为这个话题增加更多的知识:
你一定要看看NetBeans。Netbeans 6.7有以下特点:

  • C/C++项目和模板:支持语法高亮、自动代码完成、自动缩进。
  • 它有C/C++调试器
  • 支持编译器配置、配置管理器和Makefile支持(带向导)。
  • 它有类窗口、使用窗口和文件导航窗口(或面板)。
  • 一个宏展开视图,还有工具提示
  • 支持QT开发

我认为它是完美(远比)Visual Studio替代品,也是学习C/C++的很好的工具。

祝你好运!


2
它对于C++也非常好。它拥有最好的语言解析器。 - Johan Boulé
9
NetBeans比Eclipse更加愉快,我真的希望更多的人开始意识到这一点。 - Didier A.
1
在与Eclipse斗争了几周之后,我找到了这个,转而使用NetBeans并感谢!它拥有更好的界面,更加响应,直观和可定制。毫无疑问,它胜过Eclipse。 - Frederik
1
这里再次投票,表示NetBeans比Eclipse好得多。它还拥有迄今为止我使用过的最好的Vim仿真(作为插件)。 - thoughton
1
它有一个C++调试器。你已经看过VisualC++的调试器了吗?它真的很好,几乎和动态/脚本语言的调试器一样好。在2015年,我们不能再用printf来调试我们的程序了。 - reuns
显示剩余3条评论

52

至少对于Qt专用项目而言,由Nokia/Trolltech/Digia开发的Qt Creator 显示出很大的潜力。


10
我也将它用于非Qt项目。 - Chance

32

请问您能否再详细说明一下您是如何操作的,需要做哪些更改?也许您可以给我提供一些链接,指明您所使用的信息来源。

我的第一个信息来源实际上是工具的man手册。只需键入

$ man toolname

在命令行上(这里的$是提示符的一部分,不是输入的一部分)。

根据平台的不同,它们写得非常好,也可以在互联网上找到。对于make,我实际上读了完整的文档,花了几个小时。实际上,在大多数情况下,我认为这并不必要或有帮助,但在我的Linux初次任务中有一些特殊要求,需要一个复杂的makefile文件。编写makefile文件后,我将其交给了一位经验丰富的同事进行了一些微小的调整和更正。之后,我基本上知道了make

我使用GVIM,因为我有一些(但很少)以前在那里的经验,我对Emacs或其他替代品一无所知。我发现阅读其他人的.gvimrc配置文件真的很有帮助。许多人将其放在网上。这是我的一个示例

不要试图一次掌握所有binutils,函数太多了。但是要有一个一般性的了解,这样以后需要时就知道该去搜索哪里。然而,您应该知道g++ld的所有重要参数(GCC链接器工具在未明确阻止时自动调用)。

还有,你编码时是否拥有代码完成和语法高亮?

语法高亮:是的,比Visual Studio好多了。代码完成:是的-有点像。首先,我必须承认,即使在Visual Studio中,我也没有使用C++代码完成,因为(与VB和C#相比)它不够好。现在我很少使用它,但是尽管如此,GVIM对于C++具有本地代码完成支持。结合ctags库和像taglist这样的插件,这几乎是一个IDE。

实际上,让我开始的是Armin Ronacher的一篇文章。在阅读文本之前,先看一下末尾的屏幕截图!

你必须先编译才能获得(语法)错误吗?

是的。但这对于Visual Studio也是一样的,不是吗(我从未使用过Whole Tomato)?当然,语法高亮会显示您不匹配的括号,但仅此而已。

那你如何调试(再次考虑断点等)?

我使用命令行工具gdb。还有一个称为DDD的图形界面。 gdb是一种现代化的调试工具,可以做到与IDE中相同的所有操作。唯一真正让我感到烦恼的是阅读堆栈跟踪,因为行没有缩进或格式化,因此在使用大量模板时(我这样做


@confuzatron:不,我使用gdb有几个原因。最重要的是,我通常在没有任何X服务器运行的情况下工作。此外,我对DDD已经很长时间没有更新感到有些不舒服。另一方面,项目所有权刚刚更改,似乎正在发生变化。 - Konrad Rudolph
谢谢关于gvim标签页信息的提示,我以前从未知道 :) - Letholdrus
VS2010能在编译前就高亮显示语法错误。 - Candy Chiu
@Candy true,VS2010在这方面改变了很多,并添加了后台编译的高级功能。但是gvim也通过插件添加了许多功能。特别是现在可以通过“clang_complete”插件获得语法错误突出显示而无需编译。这个答案是来自2009年的,有些部分已经过时了。但是各方面都有所改进,所以它更或多或少地平衡了。 - Konrad Rudolph

25

不想重复之前的答案,但我认为我可以再加点。

Slickedit 是一个非常好的IDE。

它能够很好地支持大型代码库而不会拖慢速度或花费大量时间进行索引。这是我在使用Eclipse的CDT时遇到的问题。
Slickedit的速度可能是它最好的特点之一。
代码补全功能良好,并且有很多选项可用于自动格式化、美化和重构。
它还具有集成调试器。
它支持插件,并且有相当活跃的社区在创建它们。
理论上,你应该能够很好地与传统的makefile人员集成,因为它允许你直接从一个makefile创建项目,但我尝试过程中遇到了一些不太顺畅的问题。
除了Linux外,还有Mac和Windows版本可供选择,如果需要的话。


23
作为一位老的UNIX用户,我经常使用Emacs。但是它的学习曲线相当陡峭和漫长,所以我不确定能否向新手推荐它。
对于Linux来说,确实没有一个“好”的集成开发环境。Eclipse对于C/C++并不是很好(CDT正在改进中,但目前还不是很有用)。其他选项缺少你需要寻找的所有功能。
真正重要的是学习所有独立工具(如gcc、make、gdb等)的工作原理。在做到这一点之后,你可能会发现Visual Studio的做法非常局限性。

“目前还不是很有用”: 自动完成经常无法正常工作,导航到函数的声明或使用处无法正常工作,语法高亮显示并不总是有效,重构不能正常运行等。就像使用vi一样,几乎没有太多改善。在我看来,GDB前端界面是唯一值得使用的地方。 - Kristopher Johnson
你不能使用老式的文本编辑器来编写超过10000行的真正程序,因为这些编辑器与调试器和代码分析器是分离的。 - reuns
在集成开发环境诞生之前,已经有很多超过10000行代码的“真实程序”被编写出来了。 - Kristopher Johnson
喷子?显然,你几乎不能没有计算机编写程序,即使在计算机发明之前已经编写了一些算法...不要喷人,我只是说这个讨论没有提到最重要的:IDE是为了帮助编码,而不是让它更加困难。现代IDE意味着:一个好的编译器提供易于理解(和点击)的错误消息+语法高亮+代码完成+调试器(+条件断点)+监视器+eval函数(小型监视器解释器+修改监视器)+运行时代码/性能分析器+.... - reuns
我忘记了IDE的搜索引擎,这在超过10000行的项目中非常重要。 - reuns
显示剩余4条评论

18

针对这个问题,我想简单跟进一下...

自从一个月前开始在Linux上使用Vim作为我的主要GUI工具来编写C++程序以来,起初的学习曲线确实有点陡峭,但是经过一段时间和正确的选项设置以及运行脚本后,我真的掌握了它!

我喜欢如何将Vim定制成适合自己需要的方式;只需添加/更改键位映射,Vim就变成了一个高生产力的“IDE”。

在Linux上构建和编译C++程序的工具链也非常直观。 make和g++是你将会使用的主要工具。

然而,调试器ddd并不是真正好用的,但也许是因为我还没有花足够的时间来精通它。

因此,对于任何正在寻找在Linux中好的C++ IDE的人,就像我一样,你最好使用Linux本身提供的标准可用工具(Vim,g++,ddd)并至少尝试使用它们,然后再寻找其他东西...

最后,我真的要感谢konrad在这里的回答,它确实帮助我找到了自己在Linux开发环境中的方向,谢谢!

我也不会关闭这个问题,所以人们仍然可以做出反应或甚至添加新的建议或补充到已经非常好的答案中...


你能在Vim+ctags中启用类似IntelliSense的功能吗?不仅仅是自动完成,还包括函数参数列表等上下文相关信息。 - kizzx2
@kizzx2: 是的,有很多选择 - Fred Nurk

18

试试Netbeans吧,它是用Java写的,因此无论你使用哪种操作系统都可以使用相同的环境,并且它支持的不仅仅是C++。

我不会试图说服你,因为我认为IDE可能是非常个人化的选择。对我来说,它通过快速、支持我编写的语言以及具有标准功能来提高了我的生产力。


5
我可以接受这个观点。在IDE中,NetBeans拥有我所见过的最优秀的C++语言解析器;胜过了Eclipse的CDT。 - Johan Boulé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接