我想将我的编程视野扩展到Linux。一个好的,可靠的基本工具集很重要,什么比IDE更基本?
我可以找到这些SO主题:
我不是在寻找轻量级 IDE。如果IDE值得花钱,那么我会付钱,所以它不需要是免费的。
我的问题是:
有什么好的,C ++编程IDE适用于Linux?
最小值是相当标准的:语法突出显示,代码完成(如intellisense或其Eclipse版本)和集成调试(例如,基本 断点)。
我自己已经搜索过了,但有很多东西几乎不可能手工分离好东西,特别是像我这样在Linux上几乎没有C ++编码经验的人。我知道Eclipse supports C++,我真的很喜欢Java for IDE,但它对C ++有什么好处,还有更好的东西吗?
第二篇文章实际上有一些很好的建议,但我缺少的是究竟是什么让这个吸收的IDE对用户如此好,它的(dis)优势是什么?
也许我的问题应该是:
你建议使用什么IDE(根据你的经验),为什么?
答案 0 :(得分:262)
最初写这个答案时,我最近从Visual Studio(具有多年经验)转到了Linux,我做的第一件事就是尝试找到一个合理的IDE。当时这是不可能的:没有好的IDE存在。
然后我意识到Linux中的IDE是带有工具的命令行:
根据您的需要,您必须安装和配置多个插件才能使编辑器正常工作(这是一个烦人的部分)。例如,Vim上的大多数程序员都将受益于智能自动完成的YouCompleteMe插件。
完成后,shell是您与各种工具交互的命令界面 - 调试器(gdb),Profilers(gprof,valgrind)等。使用Make设置项目/构建环境,{ {3}},CMake或任何其他替代方案。您使用版本控制系统管理代码(大多数人使用SnakeMake)。您还可以使用Git(以前也是屏幕)来复用(=考虑多个窗口/选项卡/面板)并保留终端会话。
关键是,由于shell和一些工具编写约定,所有都相互集成。那样 Linux shell是一个真正的集成开发环境,完全与其他现代IDE相提并论。 (这并不意味着单个IDE没有命令行可能缺少的功能,但反过来也是如此。)
我不能夸大上述工作流程在你养成习惯后的功能。但是有些人只是喜欢图形编辑器,而且自从这个答案最初编写以来的几年里,Linux已经为几种不同的编程语言获得了一套优秀的图形IDE(但据我所知,不是C ++)。即使 - 像我一样 - 你最终没有使用它们,请试试看。这里只是一个小而有偏见的选择:
请记住,此列表远未完成。
1 我从dsm的评论中偷走了这个标题。
2 我曾经在这里提到过Vim。虽然普通的Vim仍然有能力,但Neovim是一个很有希望的重启,并且现代化了几个老疣。
答案 1 :(得分:86)
我个人最喜欢的是 CodeLite 2.x IDE。
使用CodeLite的决定是基于以下针对Linux的C ++ IDE的研究:
毕竟我决定使用 CodeLite 2.x 。
下面我列出了有关上述C ++ IDE的一些优点和缺点。请注意,这仅反映了我的个人意见!
编辑:SOF不支持表格真可惜,所以我必须写段落......
带有CDT插件的Eclipse Galileo
优点:
缺点:
NetBeans 6.7 (请注意,这也是SunStudio IDE的基础)
优点:
缺点:
KDevelop4 (注意:我没有太多测试)
优点:
缺点:
CodeBlocks 8.02 (注意:我没有太多测试)
优点:
缺点:
CodeLite 2.x (注意:这是我个人的最爱)
优点:
缺点:
答案 2 :(得分:75)
很快你会发现IDE还不够,无论如何你都必须学习GCC工具链(这并不难,至少要学习基本功能)。但是,使用IDE减轻过渡性疼痛没有任何害处,IMO。
答案 3 :(得分:66)
快速回答,只是为此主题添加更多知识:
你一定要看看NetBeans。 Netbeans 6.7具有以下功能:
我认为它是一个完美的(并且更好)Visual Studio替代品,是学习C / C ++的一个非常好的工具。
祝你好运!
答案 4 :(得分:52)
至少对于Qt特定的项目,Qt Creator(来自诺基亚/奇趣科技/ Digia)显示出巨大的希望。
答案 5 :(得分:32)
你能否澄清它对你的影响,你需要改变的东西。也许你可以通过提供你所用信息的链接来指出我正确的方向。
我的第一个来源实际上是工具'man
页面。只需输入
$ man toolname
命令行上的($
这里是提示的一部分,而不是输入。)
根据平台的不同,它们写得非常好,也可以在互联网上找到。在make
的情况下,我实际上阅读了花费了几个小时的完整documentation。实际上,在大多数情况下,我认为这不是必要或有帮助的,但我在Linux下的第一个作业中有一些特殊要求需要复杂的makefile。在写完makefile之后,我把它交给了一位经验丰富的同事,他做了一些小的调整和修改。在那之后,我几乎知道make
。
我使用GVIM是因为我在那里有一些(但没有多少)经验,我根本不能说任何关于Emacs或其他选择的东西。我发现阅读其他人的.gvimrc
配置文件确实很有帮助。很多人把它放在网上。这是mine。
不要试图一次掌握所有binutils,功能太多了。但是要获得一般概述,以便在将来需要某些东西时知道在哪里搜索。但是, 应该知道g++
和ld
的所有重要参数(GCC链接器工具自动调用,除非明确禁止)。
另外我很好奇,你编码时是否有代码完成和语法高亮?
语法高亮显示:是的,比Visual Studio好得多。代码完成:是 - ish 。首先,我必须承认,即使在Visual Studio中我也没有使用C ++代码完成,因为(与VB和C#相比)它还不够好。我现在不经常使用它,但是,GVIM 具有 C ++的本机代码完成支持。结合ctags库和像taglist这样的插件,这几乎就是一个IDE。
实际上,让我开始的是Armin Ronacher的article。在阅读文本之前,请查看最后的截图!
在获得(语法)错误之前,你必须先编译吗?
是。但这对于Visual Studio来说是一样的,不是吗(我从未使用过Whole Tomato)?当然,语法高亮显示将显示不匹配的括号,但这是关于所有。
你如何调试(再次考虑断点等)?
我使用gdb
这是一个命令行工具。还有一个名为DDD
的图形前端。 gdb
是一个现代化的调试工具,可以完成您在IDE中可以执行的所有操作。唯一让我烦恼的是读取堆栈跟踪,因为行没有缩进或格式化,所以当你使用大量模板时我很难扫描信息(我这样做)。但那些也会混乱IDE中的堆栈跟踪。
就像我说的那样,我很高兴能够在高中时使用Windows记事本和命令行java编译器在Java编程语言中设置我的第一步,这真是一场噩梦!当然,当我可以将它与我当时拥有体面的IDE的其他编程课程进行比较时
您甚至不应该尝试将现代的全功能编辑器(如Emacs或GVIM)与记事本进行比较。记事本是一个装饰TextBox
控件,这真的有所不同。此外,在Linux和Windows上使用命令行是一种非常不同的体验。 Windows cmd.exe
严重瘫痪。 PowerShell要好得多。
/编辑:我应该明确提到 GVIM已经选项卡式编辑(如标签式浏览,而不是制表符与空格)!我花了很长时间才找到它们,尽管它们根本没有隐藏。只需在打开文件或创建新文件时键入:tabe
而不是普通:e
,GVIM就会创建一个新标签。可以使用光标或几个不同的快捷方式(取决于平台)在标签之间切换。键gt
(在命令模式下键入 g ,然后 t )应该可以在任何地方使用,并跳转到下一个选项卡或选项卡号。 n 如果给出了数字。输入:help gt
以获得更多帮助。
答案 6 :(得分:25)
不要重复回答,但我想我可以多补充一点。
Slickedit是一个出色的IDE。
它支持大型代码库,而不会减慢或花费所有时间索引。 (这是我用eclipse的cdt遇到的一个问题)。实际上,Slickedit的速度可能是最好的
代码完成效果很好,并且有很多选项可用于自动格式化,美化和重构
它确实集成了调试功能
它有插件支持和相当活跃的社区创建它们
理论上,你应该能够与做传统makefile的人很好地集成,因为它允许你直接从一个创建一个项目,但是当我尝试它时,它并不像我想的那样顺利。
除了Linux之外,还有Mac和Windows版本,如果你需要它们。
答案 7 :(得分:23)
作为一个老式的UNIX人,我总是使用Emacs。但这有一个相当陡峭和漫长的学习曲线,所以我不确定我是否可以推荐给新人。
Linux确实没有“好”的IDE。 Eclipse对C / C ++不是很好(CDT正在改进,但还不是很有用)。其他人都缺少你要寻找的所有功能。
了解所有单个工具(gcc,make,gdb等)的工作原理非常重要。执行此操作后,您可能会发现Visual Studio的处理方式非常有限。
答案 8 :(得分:18)
Checkout Netbeans,它是用Java编写的,因此无论您的操作系统如何,您都将拥有相同的环境,并且它支持的不仅仅是C ++。
我不会试图说服你,因为我认为IDE可以是一个非常个人化的选择。对我来说,它通过快速,支持我编写的语言来提高我的工作效率,并具有您期望从IDE中获得的标准功能。
答案 9 :(得分:18)
快速跟进此问题......
自从我开始使用Vim作为我的主要'GUI'已经一个月了 在Linux中编程C ++的工具。起初学习 曲线确实有点陡峭,但过了一会儿,随着 正确的选项打开了scripts running我真的 掌握了它!
我喜欢你如何塑造Vim来满足你的需求; 只需添加/更改key mappings,Vim就会变成一个 高效的'IDE'。
在Linux上构建和编译C ++程序的工具链是 也很直观。 make和g ++是 工具 使用
然而,debugger ddd并不是那么好,但是 也许那是因为我没有时间去掌握它 正常。所以对于那些正在或正在寻找一个好的C ++ IDE的人来说 Linux就像我一样,你最好的选择就是标准 Linux本身可用的工具(Vim,g ++,ddd)和你 在寻找之前,应该至少尝试使用它们 sonething其他......
最后但同样重要的是,我真的要感谢konrad 他的答案在这里,这真的帮助我找到了自己的方式 Linux开发环境,谢谢!
我也没有关闭这个问题,所以人们仍然可以 反应,甚至可能添加新的建议或添加 已经非常好的答案...
答案 10 :(得分:15)
我建议你阅读The Art Of UNIX Progranmming。它将使您的思维成为使用环境作为IDE。
答案 11 :(得分:12)
更短的答案是:选择你喜欢的任何“编辑器”,然后使用GDB控制台或简单的GDB前端来调试你的应用程序。调试器带有花哨的IDE,比如Netbeans很糟糕的C / C ++。我使用Netbeans作为编辑器,使用Insight和GDB控制台作为我的调试器。
凭借洞察力,您拥有良好的GUI和GDB的原始功能。
一旦习惯了GDB命令,你就会开始喜欢它,因为你可以做一些你永远无法使用GUI做的事情。如果您使用的是GDB 7或更新版本,甚至可以使用 Python 作为脚本语言。
这里的大多数人都更关注IDE的“编辑”。但是,如果您正在使用C / C ++开发大型项目,则可以轻松地将70%以上的时间花在“调试器”上。花哨的IDE的调试器至少落后于Visual Studio 10年。例如,Netbenas与Visual Studio的接口非常相似。但与Visual Studio相比,它的调试器有许多缺点。
列表可能会更长。
我对Netbeans或其他类似IDE的缺点感到非常沮丧,因此我开始学习GDB本身。我发现GDB本身非常强大。 GDB没有上面提到的所有“缺点”。实际上,GDB非常强大,它在很多方面甚至比Visual Studio更好。在这里,我只向您展示一个非常简单的例子。
例如,你有一个像:
这样的数组struct IdAndValue
{
int ID;
int value;
};
IdAndValue IdAndValues[1000];
当您的应用程序停止时,您想要检查IdAndValues中的数据。例如,如果要在数组中查找特定“ID”的序数和值,可以创建如下的脚本:
define PrintVal
set $i=0
printf "ID = %d\n", $arg0
while $i<1000
if IdAndValues[$i].ID == $arg0
printf "ordinal = %d, value = %d\n", $i, IdAndValues[$i].vaue
set $i++
end
end
end
您可以在当前上下文中使用应用程序中的所有变量,您自己的变量(在我们的示例中,它是$ i),传递的参数(在我们的示例中,它是$ arg0)和所有GDB命令(内置或用户定义)。
使用GDB提示中的 PrintVal 1 打印ID“1”的值
顺便说一句,NetBeans确实附带了一个GDB控制台,但是通过使用控制台,你可能会崩溃Netbeans。我相信这就是为什么控制台默认隐藏在NetBeans中
答案 12 :(得分:11)
如果您喜欢Eclipse for Java,我建议使用Eclipse CDT。 尽管C / C ++支持不像Java那么强大,但它仍然提供了大部分功能。它有一个很好的功能,名为Managed Project,如果你没有Makefile的经验,可以更轻松地使用C / C ++项目。但你仍然可以使用Makefiles。 我做C和Java编码,我对CDT非常满意。我正在开发用于C语言的嵌入式设备的固件和用于与该设备通信的Java应用程序,并且非常适合为两者使用相同的环境。我想这可能会让我更有成效。
答案 13 :(得分:11)
到目前为止,我正在使用“Geany”,它的快速和轻量级IDE。
答案 14 :(得分:9)
我喜欢人们完全错过IDE原始问题中的请求。 Linux不是IDE。这不是那些词的意思。我使用vi和gcc和make学习了c和c ++,我并不是说它们不是适当的工具,但它们不是IDE。即使您使用更复杂的工具(如vim或emacs)或任何您想要的精美编辑器,在命令行上键入命令也不是IDE。
另外,你们都知道make作为visual studio的一部分存在吗?如果你可以使用IDE来加速某些事情,那么IDE是“限制”的想法是愚蠢的,但仍然可以在需要时依赖命令行。
所有这一切,我建议,正如以上几个一样,尝试代码块。它有很好的代码突出显示,一个非常轻松的方式来创建一个项目,编码,运行它等,这是一个真正的IDE的核心,似乎相当稳定。调试糟透了......我从来没有在任何linux / unix变体中看到过一个像样的交互式调试器。 gdb不是吗。如果你已经习惯了视觉工作室风格的调试,那你几乎没有运气。
无论如何,我会收拾东西,我知道只有一个观点的Linux人群会大声喊叫,让我立刻离开城市。
答案 15 :(得分:8)
make + vim + gdb =一个很棒的IDE
答案 16 :(得分:7)
我非常喜欢Ultimate++的IDE。它有一些功能,旨在与自己的库一起使用(如果您不想在GTK +或QT上购买,BTW,这是一个非常好的工具包),但它与一般的C ++项目完美配合。它提供了良好的代码完成,良好的语法着色,集成调试以及大多数现代IDE支持的所有其他功能。
答案 17 :(得分:7)
我真的建议codeblocks。它没有Eclipse那么重,而且它得到了Visual Studio项目的支持。
答案 18 :(得分:6)
在Linux上有很多IDE:
在我的体验中,最有价值的是 Eclipse 和 Qt Creator 。 两者都提供所有&#34;标准&#34;功能(即自动完成,语法突出显示,调试器,git集成)。 值得注意的是,Eclipse还提供了重构功能,而Qt Creator提供了与Valgrind的集成,并支持在远程目标上的部署。
商业广告CLion IDE似乎也很好(但我还没有广泛使用它)。
答案 19 :(得分:6)
Eclipse的Linux Tools Project可能满足您的需求吗?
Linux Tools项目旨在为Linux开发人员提供功能齐全的C和C ++ IDE。我们以CDT的源代码编辑和调试功能为基础,集成了流行的本机开发工具,如GNU Autotools,Valgrind,OProfile,RPM,SystemTap,GCov,GProf,LTTng等。目前的项目包括LTTng跟踪查看器和分析器, RPM .spec编辑器,Autotools构建集成,Valgrind堆使用情况分析工具和OProfile调用分析工具。
答案 20 :(得分:5)
然后我注意到这根本就不是你在那里工作的方式*,我扔掉了所有东西,花了几天阅读手册,设置我的shell(bash),建立一个GVIM环境,学习了GCC / binutils toolchain,make和gdb,从此过上幸福的生活。
我大多同意,但问题也是一种看法:我们忘记了在任何选择的IDE(或其他环境)中提高工作效率的难度。我发现IDE(Visual Studio,NetBeans,Eclipse)在很多方面都非常麻烦。
作为一个老式的UNIX人,我总是使用Emacs。但那非常陡峭 而且学习曲线很长,所以我不确定我是否可以向新人推荐它。
我是第二个;在Linux和MSW(XP2,W2K)上使用Emacs作为我的主编辑器。 我不同意它有一个陡峭的学习曲线,但是会说由于它具有大量的特征,所以它具有长学习曲线。您可以在短时间内保持高效,但如果您愿意,您可以在未来几年内学习它的新功能。
然而 - 不要指望Emacs的所有功能都可以在下拉菜单中使用,因为功能太多而无法在那里找到它。
正如我所提到的,我已经在MSW上使用了GNU Emacs多年。在我“升级”到2008年之前,它始终与Visual Studio配合良好;现在它有时在从磁盘刷新文件之前会延迟很多秒。 VS窗口中编辑的主要原因是“Intellisense”代码完成功能。
答案 21 :(得分:5)
虽然我使用Vim,但我的一些同事使用的SlickEdit看起来相当不错。我不确定集成调试,因为无论如何我们都无法在我们的特定项目上做到这一点。
SlickEdit确实支持导航大型代码库,具有交叉引用和标记跳转功能。当然它也有基本的东西,如语法高亮和代码完成。
答案 22 :(得分:5)
我听说Anjuta非常适合Gnome用户。我和KDevelop玩了一下它很好,但有点缺乏特色。 Code :: Blocks也很有前途,我最喜欢那个。
答案 23 :(得分:5)
我使用Eclipse CDT和Qt Creator(用于Qt应用程序)。
这是我的偏好。这是一个非常具有启发性的问题,答案与开发人员一样多。 :)
答案 24 :(得分:5)
Sun Studio版本12是免费下载(免费和付费支持) - http://developers.sun.com/sunstudio/downloads/thankyou.jsp?submit=%A0FREE+Download%A0%BB%A0。
我确信您拥有代码完成和调试支持,包括此IDE中的插件支持。
Sun Studio适用于Linux和Solaris。 论坛:http://developers.sun.com/sunstudio/community/forums/index.jsp。 Sun Studio Linux论坛:http://forum.sun.com/forum.jspa?forumID=855
我很想听听您对此工具的反馈。
BR,
〜A
答案 25 :(得分:5)
我之前使用的是Ultimate ++ IDE,它相当不错。
答案 26 :(得分:5)
geany我建议
答案 27 :(得分:4)
SlickEdit的。自2005年以来,无论是在Windows上还是在Linux上,我都使用过SlickEdit。我也有使用Visual Studio(5,6,2003,2005)和Emacs和命令行的经验。我使用SlickEdit和外部makefile,我的一些队友使用SlickEdit,其他人使用Emacs / vi。我不使用集成调试器,集成版本控制,集成构建系统:我通常发现太多集成是真正的痛苦。 SlickEdit非常强大(很少有错误),快速而直观。它就像一辆德国汽车,一辆司机的汽车。
最新版本的SlickEdit似乎提供了许多我不感兴趣的功能,我有点担心该产品将来会变得臃肿和稀释。现在(我使用V13.0)很棒。
答案 28 :(得分:3)
对于基于CMake的项目,我使用Jetbrains CLion
对于基于Autotools的项目已经提到的Qtcreator。
其他一切:VIM + YouCompleteMe
答案 29 :(得分:3)
对我来说Ultimate++似乎是编写跨操作系统程序的最佳解决方案
答案 30 :(得分:3)
大约3年前,我一直在使用Anjuta进行大学项目。我最近没有使用它。但那时候很不错,所以最新发布的版本应该会更好。
答案 31 :(得分:3)
如果你长时间使用vim,那么你应该把它作为你的IDE。有很多插件可用。我发现其中有几个非常有用,并在这里编译,看看它。
vi / vim提示和更多内容那边的技巧系列。
答案 32 :(得分:2)
我更喜欢使用Emacs和Vim来编写C ++代码。当我需要使用IDE时,我使用CodeBlocks。
答案 33 :(得分:2)
我喜欢SciTE作为Linux上C ++ / Python的基本编辑器。它具有类似于VC的键盘绑定,因此您无需重新编程剪切和粘贴手指。
我将它与Git一起用于源代码控制和非常有用的'git grep'命令,用于在代码库中进行搜索。
我使用Eclipse CDT,但我的源代码库很大,我花了太多时间等待IDE。如果您的项目较小,可能对您有好处。
答案 34 :(得分:2)
使用Mono-Develop。它与Visual Studio非常相似。它跨平台工作,真棒!
答案 35 :(得分:1)
在Visual Studio上长大后,我发现相对年轻的Code::Blocks非常熟悉。
答案 36 :(得分:1)
康拉德的建议非常好,你应该在经典的vi / cc / ld / db / make环境中愉快地工作,而不会有太多麻烦。许多大学生在10-15周的课程中学习了这个工具链。
也就是说,另一个经典环境是走Emacs路线。我不会把它称为IDE,但它确实将两个重要的开发工具集成到编辑器中:编译器的输出和调试器。您可以将它压缩到文件中对应于编译器错误的行,您可以设置断点并使用编辑器中的步进器。
答案 37 :(得分:1)
我很高兴你似乎正在用vim解决这个问题。但我不得不说,我对你如何“真的喜欢Eclipse for Java”感到有点神秘,暗示你已经熟悉它是如何工作的。在那种情况下,你为什么不用它来用于C ++? CDT符合您提到的每一项要求。
答案 38 :(得分:1)
vim编辑器+ g ++编译器(GNU C ++)+ gdb - 可能对你有帮助
答案 39 :(得分:1)
答案 40 :(得分:0)
Code :: Blocks很棒。
答案 41 :(得分:0)
在我看来,最适合Linux的IDE是SlickEdit。它花费了一些钱,但它对标记和伟大的差异工具的快速,强大的支持,适用于大型项目。
答案 42 :(得分:0)
您可以通过用户空间的Plan 9使用它。
答案 43 :(得分:0)
您也可以尝试将emacs设置为IDE。
详细讨论here。
答案 44 :(得分:0)
why wouldn't you also use it for C++? CDT meets every requirement you've mentioned.
我最初没有使用eclipse,因为我不确定它是否同样适合用C ++开发(高效)。除此之外,我还相信在Linux中必须有更好,更专业的工具可用于c ++开发:
我真的很喜欢java的[eclipse] IDE, 但它对c ++有什么用处,而不是我 错过了一些偶数的东西 更好?
我真的相信,虽然有些工具(比如eclipse)在许多方面都很出色,但最好还是寻找其他选项(我并不仅仅指IDE,但总的来说,甚至在< em>现实生活)...
就像在这种情况下,vim真的很棒,如果我坚持我已经知道的东西,我会错过它。