我想将我的编程视野扩展到Linux.一个好的,可靠的基本工具集很重要,什么比IDE更基本?
我可以找到这些SO主题:
适用于Linux和Linux的轻量级IDE
您使用什么工具在Linux上开发C++应用程序?
我不是在寻找轻量级的 IDE.如果IDE值得花钱,那么我会付钱,所以它不需要是免费的.
那么我的问题是:
什么好的,C++编程IDE可用于Linux?
最小值是相当标准的:语法突出显示,代码完成(如intellisense或其Eclipse对应)和集成调试(例如,基本断点).
我自己也在搜索它,但有很多东西几乎不可能手工分离好东西,特别是像我这样在Linux上几乎没有C++编码经验的人.我知道Eclipse支持C++,我真的很喜欢Java for IDE,但它对C++有什么好处,还有更好的东西吗?
第二篇文章实际上有一些很好的建议,但我缺少的是究竟是什么让这个吸收的IDE对用户如此好,它的(dis)优势是什么?
也许我的问题应该是:
您提出了什么IDE(根据您的经验),为什么?
Konrad Rudol.. 261
在最初编写这个答案时,我最近从Visual Studio(具有多年经验)转换到Linux,我做的第一件事就是尝试找到合理的IDE.当时这是不可能的:没有好的IDE存在.
然后我意识到Linux中的IDE是带有工具的命令行:
首先你设置你的shell
Bash,就我而言,但很多人更喜欢
鱼或
(哦,我的)Zsh ;
和你的编辑; 选择你的毒药 - 两者都是最先进的:
Neovim 2或
Emacs.
根据您的需要,您必须安装和配置几个插件,以使编辑器工作得很好(这是一个烦人的部分).例如,Vim上的大多数程序员都将从YouCompleteMe插件中受益,以实现智能自动完成.
完成后,shell是您与各种工具交互的命令界面 - 调试器(gdb),Profilers(gprof,valgrind)等.使用Make,CMake,SnakeMake或任何各种工具设置项目/构建环境备择方案.您使用版本控制系统管理代码(大多数人使用Git).您还可以使用tmux(以前也是屏幕)来复用(=考虑多个窗口/选项卡/面板)并保持终端会话.
关键是,由于shell和一些工具编写约定,这些都相互集成.这样,Linux shell就是一个真正的集成开发环境,与其他现代IDE完全相同.(这并不意味着单个IDE没有命令行可能缺少的功能,但反过来也是如此.)
一旦你养成习惯,我不能夸大上述工作流程的功能.但是有些人更喜欢图形编辑器,而且自从这个答案最初编写以来的几年里,Linux已经为几种不同的编程语言获得了一套优秀的图形IDE(但据我所知,对于C++来说并非如此).即使 - 像我一样 - 你最终没有使用它们,请试一试.这里只是一个小而有偏见的选择:
对于Python开发,有PyCharm
对于R,有RStudio
对于JavaScript和TypeScript,有Visual Studio Code(这也是一个很好的全能编辑器)
最后,很多人都喜欢Sublime Text编辑器进行一般代码编辑.
请记住,此列表远未完成.
1我从dsm的评论中偷走了那个头衔.
2我以前在这里提到Vim.虽然普通的Vim仍然有能力,但Neovim是一个很有希望的重启,并且现代化了几个老疣.
在最初编写这个答案时,我最近从Visual Studio(具有多年经验)转换到Linux,我做的第一件事就是尝试找到合理的IDE.当时这是不可能的:没有好的IDE存在.
然后我意识到Linux中的IDE是带有工具的命令行:
首先你设置你的shell
Bash,就我而言,但很多人更喜欢
鱼或
(哦,我的)Zsh ;
和你的编辑; 选择你的毒药 - 两者都是最先进的:
Neovim 2或
Emacs.
根据您的需要,您必须安装和配置几个插件,以使编辑器工作得很好(这是一个烦人的部分).例如,Vim上的大多数程序员都将从YouCompleteMe插件中受益,以实现智能自动完成.
完成后,shell是您与各种工具交互的命令界面 - 调试器(gdb),Profilers(gprof,valgrind)等.使用Make,CMake,SnakeMake或任何各种工具设置项目/构建环境备择方案.您使用版本控制系统管理代码(大多数人使用Git).您还可以使用tmux(以前也是屏幕)来复用(=考虑多个窗口/选项卡/面板)并保持终端会话.
关键是,由于shell和一些工具编写约定,这些都相互集成.这样,Linux shell就是一个真正的集成开发环境,与其他现代IDE完全相同.(这并不意味着单个IDE没有命令行可能缺少的功能,但反过来也是如此.)
一旦你养成习惯,我不能夸大上述工作流程的功能.但是有些人更喜欢图形编辑器,而且自从这个答案最初编写以来的几年里,Linux已经为几种不同的编程语言获得了一套优秀的图形IDE(但据我所知,对于C++来说并非如此).即使 - 像我一样 - 你最终没有使用它们,请试一试.这里只是一个小而有偏见的选择:
对于Python开发,有PyCharm
对于R,有RStudio
对于JavaScript和TypeScript,有Visual Studio Code(这也是一个很好的全能编辑器)
最后,很多人都喜欢Sublime Text编辑器进行一般代码编辑.
请记住,此列表远未完成.
1我从dsm的评论中偷走了那个头衔.
2我以前在这里提到Vim.虽然普通的Vim仍然有能力,但Neovim是一个很有希望的重启,并且现代化了几个老疣.
我个人最喜欢的是CodeLite 2.x IDE.
见:http://www.codelite.org
使用CodeLite的决定是基于以下针对Linux的C++ IDE的研究:
带有CDT插件的Eclipse Galileo
NetBeans 6.7(也是SunStudio IDE的基础)
KDevelop4
CodeBlocks 8.02
CodeLite 2.x.
毕竟我已经决定使用CodeLite 2.x的.
下面我列出了有关上述C++ IDE的一些优点和缺点.请注意,这仅反映了我个人的意见!
编辑:可惜SOF不支持表格,所以我必须写段落......
带有CDT插件的Eclipse Galileo
优点:
合理快
也支持Java,Perl(带EPIC插件)
常用且维护良好
也适用于其他操作系统风格(Windows,MacOS,Solaris,AIX(?))
缺点:
GUI非常混乱,有些不一致 - 根本不是很直观
重量很重
仅支持CVS(AFAIK)
NetBeans 6.7(注意这也是SunStudio IDE的基础)
优点:
我见过的最直观的GUI之一
还支持Java,Python,Ruby
集成了CVS,SVN,Mercurial
常用且维护良好
也可用于其他操作系统风格(Windows,MacOS,Solaris)
缺点:
极其缓慢
重量很重
使用Spaces进行缩进,这不是我工作的政策.我确信这是可配置的,但我无法找到如何做到这一点
KDevelop4(注意:我没有太多测试)
优点:
常用于Linux
集成了CVS,SVN,Mercurial
缺点:
GUI看起来有点老式
重量很重
非常特定于KDE环境
CodeBlocks 8.02(注意:我没有太多测试)
优点:
合理快
缺点:
GUI看起来有点老式(虽然它有一个很好的启动屏幕)
编辑器中的字体非常小
一些图标(例如调试器相关的图标开始/步进)非常小
没有源代码控制集成
CodeLite 2.x(注意:这是我个人的最爱)
优点:
我在Linux上看到的最好,最现代,最直观的GUI
轻量级
合理快
集成了SVN
也适用于其他操作系统风格(Windows,MacOS,Solaris(?))
缺点:
没有CVS集成(这对我很重要,因为我必须在工作中使用它)
不支持Java,Perl,Python(会很高兴)
代码::块
Eclipse CDT
很快你会发现IDE还不够,你还是要学习GCC工具链(这并不难,至少要学习基本功能).但IMO还不能减少IDE的过渡性痛苦.
快速回答,只是为此主题添加更多知识:
您必须查看NetBeans.Netbeans 6.7具有以下功能:
C/C++项目和模板:支持语法高亮,自动代码完成,自动缩进.
它有一个C/C++调试器
支持编译器配置,配置管理器和Makefile支持(使用向导).
它有一个Classes窗口,一个Usages窗口和一个文件导航窗口(或面板).
甲宏扩展视图,并且还工具提示.
支持QT开发.
我认为它是一个完美的(并且更好)Visual Studio替代品,是学习C/C++的一个非常好的工具.
祝好运!
至少对于Qt特定项目,Qt Creator(来自Nokia/Trolltech/Digia)显示出巨大的希望.
你能不能再澄清它对你的影响,你必须改变什么.也许您可以通过提供一些指向您所使用信息的链接来指出我正确的方向.
我的第一个来源实际上是工具的man
页面.只需输入
$ man toolname
在命令行上($
这是提示的一部分,而不是输入).
根据平台的不同,它们写得非常好,也可以在互联网上找到.在这种情况下make
,我实际上阅读了几个小时的完整文档.实际上,在大多数情况下,我认为这不是必要或有用的,但我在Linux下的第一个作业中有一些特殊要求需要复杂的makefile.在写完makefile之后,我把它交给了一位经验丰富的同事,他做了一些小的调整和修改.在那之后,我几乎知道make
.
我使用GVIM是因为我有一些(但不是很多)以前的经验,我根本不能说任何关于Emacs或替代品的东西.我发现阅读其他人的.gvimrc
配置文件确实很有帮助.很多人把它放在网上.这是我的.
不要试图一次掌握所有binutils,功能太多了.但是要获得一般概述,以便在将来需要某些东西时知道在哪里搜索.但是,您应该知道g++
和ld
(除非明确禁止时自动调用的GCC链接器工具)的所有重要参数.
另外我很好奇,你编码时是否有代码完成和语法高亮?
语法高亮:是的,比Visual Studio好得多.代码完成:是- ISH.首先,我必须承认,即使在Visual Studio中我也没有使用C++代码完成,因为(与VB和C#相比)它还不够好.我现在不经常使用它,但是,GVIM 具有对C++的本机代码完成支持.结合ctags库和类似taglist的插件,这几乎就是一个IDE.
实际上,让我开始的是Armin Ronacher 的一篇文章.在阅读文本之前,请查看最后的截图!
在获得(语法)错误之前,你必须先编译吗?
是.但这对于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在命令模式下)应该可以在任何地方使用,并跳转到下一个选项卡或选项卡号.ñ如果被赋予了许多.输入:help gt
以获得更多帮助.
不重复答案,但我想我可以多补充一点.
Slickedit是一款出色的IDE.
它支持大型代码库,而不会减慢或花费所有时间索引.(这是我用eclipse的cdt遇到的一个问题).实际上,Slickedit的速度可能是最好的.
代码完成效果很好,并且有很多选项可用于自动格式化,美化和重构.
它确实集成了调试功能.
它有插件支持和相当活跃的社区创建它们.
理论上,你应该能够与做传统makefile的人很好地集成,因为它允许你直接从一个创建一个项目,但是当我尝试它时,它并没有像我希望的那样顺利.
除Linux之外,还有Mac和Windows版本,如果需要它们.
作为一个老式的UNIX人,我总是使用Emacs.但这有一个相当陡峭和漫长的学习曲线,所以我不确定我是否可以推荐给新手.
Linux确实没有"好"的IDE.Eclipse对C/C++不是很好(CDT正在改进,但还不是很有用).其他人都缺少您要寻找的所有功能.
了解所有单个工具(gcc,make,gdb等)的工作原理非常重要.执行此操作后,您可能会发现Visual Studio的处理方式非常有限.
Checkout Netbeans,它是用Java编写的,因此无论您的操作系统如何,您都将拥有相同的环境,并且它支持的不仅仅是C++.
我不会试图说服你,因为我认为IDE可以是一个非常个人化的选择.对我而言,它通过快速提高我的工作效率,支持我编写的语言,并具有您期望从IDE中获得的标准功能.
只需快速跟进这个问题......
自从我开始使用Vim作为我在Linux中编程C++的主要"GUI"工具以来已经过去了一个月.起初学习曲线确实有点陡峭,但过了一段时间,打开正确的选项并运行脚本我真的掌握了它!
我喜欢你如何塑造Vim来满足你的需求; 只需添加/更改键映射,Vim就会变成一个高效的"IDE".
在Linux上构建和编译C++程序的工具链也非常直观.make和g ++是你将要使用的工具.
然而,调试器ddd并不是那么好,但可能是因为我没有时间正确掌握它.
对于那些曾经或正在寻找Linux中的C++ IDE的人来说,就像我一样,你最好的选择是使用Linux本身的标准可用工具(Vim,g ++,ddd),你至少应该尝试使用他们,在寻找其他的声音之前......
最后但并非最不重要的,我真的要感谢konrad在这里的回答,这真的帮助我在Linux开发环境中找到了自己的方式,谢谢!
我也没有关闭这个问题,所以人们仍然可以做出反应,甚至可能在已经非常好的答案中添加新的建议或补充......
我建议你阅读The Art Of UNIX Progranmming.它将使您的思维成为使用环境作为IDE.
更短的答案是:选择你喜欢的任何"编辑器",然后使用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相比,它的调试器有许多缺点.
即使只有几百个元素的数组也很慢显示
没有突出显示更改的值(默认情况下,visual studio在观察窗口中以红色显示更改的值)
显示记忆的能力非常有限.
您无法修改源代码然后继续运行.如果错误需要很长时间才能命中,您希望更改源并实时应用更改并继续运行您的应用程序.
您无法更改要运行的"下一个语句".在Visual Studio中,您可以使用"设置下一个语句"来更改应用程序的运行方式.虽然如果使用不当,此功能可能会使您的应用程序崩溃,但它会为您节省大量时间.例如,如果您发现应用程序的状态不正确,但您不知道导致问题的原因,则可能需要重新运行源代码的某个区域而不重新启动应用程序.
没有内置的STL支持,例如vector,list,deque和map等.
没有观看点.当您需要在变量更改时停止应用程序时,您需要具有此功能.基于Intel的计算机具有硬件观察点,因此观察点不会减慢您的系统速度.如果不使用观察点,可能需要花费数小时才能找到难以发现的错误."Visual Studio"将"watch pointer"称为"Data BreakPoint".
列表可能会更长.
我对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默认隐藏控制台的原因
我使用的" Geany "到目前为止发现它的快速和轻量级IDE.
Geany的功能包括:
代码折叠
会话保存
基本IDE功能,如语法突出显示,选项卡,自动缩进和代码完成
简单的项目管理
建立系统
颜色选择器(在Web开发期间非常方便)
嵌入式终端仿真
致电提示
符号列表
自动完成常见结构(例如if,else,while等)
如果您喜欢Eclipse for Java,我建议使用Eclipse CDT.尽管C/C++支持不如Java那么强大,但它仍然提供了大部分功能.它有一个很好的功能,名为Managed Project,如果你没有Makefile的经验,可以更轻松地使用C/C++项目.但你仍然可以使用Makefiles.我做C和Java编码,我对CDT非常满意.我正在开发用于C语言的嵌入式设备的固件和用于与该设备通信的Java应用程序,并且非常适合为两者使用相同的环境.我想这可能会让我更有成效.
我喜欢人们完全错过IDE原始问题中的请求.Linux不是IDE.这不是那些词的意思.我使用vi和gcc和make学习了c和c ++,我并不是说它们不是适当的工具,但它们不是IDE.即使您使用更复杂的工具(如vim或emacs)或任何您想要的精美编辑器,在命令行上键入命令也不是IDE.
另外,你们都知道make作为visual studio的一部分存在吗?如果你可以使用IDE来加速某些事情,那么IDE是"限制"的想法是愚蠢的,但仍然能够在需要时依赖命令行.
所有这一切,我建议,正如以上几个,尝试代码块.它有很好的代码突出显示,一个非常轻松的方式来创建一个项目,编码,运行它等,这是一个真正的IDE的核心,似乎相当稳定.调试糟透了......我从来没有在任何linux/unix变体中看到过一个像样的交互式调试器.gdb不是吗.如果您习惯于视觉工作室风格的调试,那么你几乎没有运气.
无论如何,我会去装我的东西,我知道只有一个观点的Linux人群会大声喊叫,让我立刻离开城镇.
make + vim + gdb =一个很棒的IDE
我非常喜欢Ultimate ++的IDE.它有一些功能,旨在与自己的库一起使用(如果您不想在GTK +或QT上购买,BTW,这是一个非常好的工具包),但它与一般的C++项目完美配合.它提供了良好的代码完成,良好的语法着色,集成调试以及大多数现代IDE支持的所有其他功能.
我真的建议使用codeblocks.它没有Eclipse那么重,而且它得到了Visual Studio项目的支持.
也许Eclipse 的Linux工具项目可以满足您的需求?
Linux Tools项目旨在为Linux开发人员提供功能齐全的C和C++ IDE.我们以CDT的源代码编辑和调试功能为基础,集成了流行的本机开发工具,如GNU Autotools,Valgrind,OProfile,RPM,SystemTap,GCov,GProf,LTTng等.目前的项目包括LTTng跟踪查看器和分析器, RPM .spec编辑器,Autotools构建集成,Valgrind堆使用分析工具和OProfile调用分析工具.
在Linux上有很多IDE:
代码::块
Codelite
KDevelop的
Qt Creator
Eclipse与CDT
NetBeans的
根据我的经验,最有价值的是Eclipse和Qt Creator.两者都提供所有"标准"功能(即自动完成,语法突出显示,调试器,git集成).值得注意的是,Eclipse还提供了重构功能,而Qt Creator提供了与Valgrind的集成以及对远程目标上的部署的支持.
商用CLion IDE看起来也不错(但我没有广泛使用它).
虽然我使用的是Vim,但我的一些同事使用的SlickEdit看起来还不错.我不确定集成调试,因为无论如何我们无法在我们的特定项目上做到这一点.
SlickEdit确实支持导航大型代码库,具有交叉引用和标记跳转功能.当然它也有语法高亮和代码完成等基本功能.
我听说Anjuta对于Gnome用户来说非常光滑.我和KDevelop玩了一下它很好,但有点缺乏特色.Code :: Blocks也很有前途,我最喜欢那个.
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
我之前使用的是Ultimate ++ IDE,它相当不错.
然后我注意到这根本不是你在那里工作的方式*,我把所有东西都扔了出去,花了几天阅读手册,设置我的shell(bash),建立一个GVIM环境,学习了GCC/binutils工具链, make和gdb从此过上幸福的生活.
我大多同意,但问题也是一种看法:我们忘记了在任何选择的IDE(或其他环境)中提高效率的难度.我发现IDE(Visual Studio,NetBeans,Eclipse)在很多方面都非常麻烦.
作为一个老式的UNIX人,我总是使用Emacs.但这有一个相当陡峭和漫长的学习曲线,所以我不确定我是否可以推荐给新手.
我是第二个; 在Linux和MSW(XP2,W2K)上使用Emacs作为我的主编辑器.我不同意它有一个陡峭的学习曲线,但可以说,因为它具有大量的功能,它有很长的学习曲线.您可以在短时间内保持高效,但如果您愿意,您可以在未来几年内学习它的新功能.
但是 - 不要期望Emacs的所有功能都可以在下拉菜单中使用,因为在那里找到它的功能太多了.
正如我所提到的,我已经在MSW上使用了GNU Emacs多年.在我"升级"到2008年之前,它始终与Visual Studio配合良好; 现在它有时会在从磁盘刷新文件之前延迟很多秒.VS窗口中编辑的主要原因是"Intellisense"代码完成功能.
geany我建议
我使用Eclipse CDT和Qt Creator(用于Qt应用程序).
这是我的偏好.这是一个非常具有启发性的问题,答案与开发人员一样多.:)