在Linux上开发C++应用程序,你使用哪些工具?

55

我在Linux环境下开发C++应用程序。 我每天使用的工具包括带有CDT插件的Eclipse、gdb和valgrind。
其他人都使用哪些工具呢? 在Linux中是否有任何可以与Microsoft Visual Studio媲美的工具?


你能解释一下你所说的“slickness”是什么意思吗?你想要强大和多功能性吗?速度和效率?还是更喜欢被手绘GUI按钮和菜单引导?(并不是说我会因为IDE限制我做我知道安全的事情而责怪它。) - NVRAM
23
作为一名纯UNIX开发者,我感到非常惭愧,但我必须承认,微软的Visual Studio是目前可用于C++开发的最好的集成开发环境之一。 - anon
@Clayton:这种问题可能会有问题。你将如何决定接受哪个答案,例如哪一个是“正确”的? - anon
只需将最后一部分读作“与微软Visual Studio相媲美的病态?”;)(已经同意) - mlvljr
24个回答

56

我使用一堆终端窗口。在一个窗口上运行 vim 处理有趣的源文件,在另一个窗口上输出 make 和 g++ 的编译器错误,或者在 gdb 会话中查找运行时错误。如果需要帮助查找定义,我会运行 cscope 并使用 vim 的 cscope 支持来跳转。

Eclipse CDT 是我的第二选择。它很好用,但与 vim 相比,它更大、笨重且缓慢。

使用终端窗口和 vim 非常灵活,因为我不需要随身携带 400 MB 的 Java,我可以从任何地方使用 SSH 会话。

当需要查找内存问题时,我使用 valgrind。

我使用 strace 在系统调用级别上监视软件的运行情况。这让我能够清理掉那些四次调用 time(0) 或过多调用 poll() 或非阻塞 read() 等代码,或者像每次只读取 1 字节的 socket 读取调用 read().(这太低效和懒惰了!)

我使用 objdump -d 检查机器码,特别是对于性能敏感的内部循环。这就是我发现字符串数组索引运算符比使用迭代器慢的方式。

我使用 oprofile 尝试在优化代码中找到热点,我发现它比 gprof 好用一些,并且可以查找数据和指令缓存失效等情况。这可以向你展示在哪里使用 GCC 的 __builtin_prefetch 来提供有效的预取提示。我也尝试过使用它来查找热的预测错误分支,但这对我来说没有起作用。

更新:我发现 perf 比 oprofile 好用得多。至少在 Linux 上。学会使用 perf,像我一样爱上它。


2
很好的概述,提供了良好的指示和清晰的理由。 - sototozo

24

当然是使用g++,还有Code::Blocks,它是一个非常棒的跨平台IDE(支持Win32、*nix和Mac)。

我使用来自SVN的夜间构建版本(最近更像是每周一次),几乎拥有现代IDE中所期望的所有功能。它真的是一款非常棒的开源项目。

另外,在Linux上你可以使用Valgrind,这可能是目前最好的内存跟踪工具(也可以做其他事情)。而且它是免费的 :) 轻松追踪内存泄漏等问题。

此外还有更多!Linux真是一个很好的开发平台 :)

(编辑)刚意识到你在问题中提到了Valgrind,我太粗心大意了。


3
我尝试过Code::Blocks,但并没有一下子看到它有什么很出色的地方,尤其是和Eclipse相比。你能详细阐述一下你喜欢它的地方吗? - Zan Lynx
5
我认为Eclipse太笨重了。我喜欢能够编译一个源文件而不必将它放在项目中。我喜欢项目文件是轻量级和不会干扰的,不像Eclipse那样严苛地管理着它们。我确实喜欢Eclipse的源代码控制,但C::B也有这个功能 :) - Adam

13

在为Linux开发C++应用程序时,我更喜欢使用一些命令行工具。 Vim与许多插件扩展。 Gdb与ddd、valgrind、libefence一起使用 和SCons(automake非常麻烦,你知道的...)


1
你使用什么类型的插件? - phillipwei
对于 Vim -> NERD_tree.vim、a.vim、calendar.vim、code_complete.vim、cscope_maps.vim 和 taglist.vim。 - zhengtonic

12
  • g++

  • emacs

  • bash 命令行

  • 在 emacs 中使用 gdb-mode(输入 M-X gdb)

  • make


如果你添加了 ant 你就是天才。 - NVRAM

9

emacs、cmake、gdb、git、valgrind。它可能没有Visual Studio那么流畅,但它工作得很好,并且可以通过bash脚本或emacs lisp轻松添加功能。


1
+1 使用 s/vim/emacs/; s/make/cmake/; - just somebody
1
经过多年尝试不同的Linux开发工具,我真的认为你正在使用同类中最好的工具。 - kovan
和@justsomebody一样,我也是这样的:D - Adri C.S.

9

目前我使用的是Qt Creator。它是跨平台的,并且与Qt集成得非常好,当然,也可以创建一个独立的应用程序。


4
我喜欢Qt Creator。绝对是一个非常优秀且与我的桌面集成得非常好的IDE工具。 - Nick Presta

8

g++和make


3
你使用“cat”进行编辑,我猜对吗? - Arafangion
7
不,我使用远程桌面连接到我的Windows电脑,并使用Eclipse编写代码,然后将其复制并粘贴到g++中。 - andrewrk
8
希望你是开玩笑的 o_O。 - Nicolás
3
磁化的针和稳定的手怎么样? - AntonioMO
1
哇,这个回答太蠢了。我道歉。我使用Qt Creator、vim、Eclipse和Microsoft Visual Studio。 - andrewrk

7
我认为KDevelop是最接近Microsoft Visual Studio的工具之一。你可以获得几乎所有(遗憾的是,VS调试器确实是一个杀手)。它已经很成熟了,并且开发速度非常快,有很大的发展前景。
实际上,它实现了一些你甚至在VS中都看不到的功能。例如,在垂直平铺模式下打开头文件和cpp文件,并使光标在两者之间同步,即:当你选择一个函数原型时,你总是会在右侧看到它的实现。
KDevelop是一个KDE项目,但也可以在Gnome上运行。Anjuta是Gnome上的一个类似项目,但我发现它无法用于实际工作。对于其余的堆栈,我使用gcc、make、valgrind、ddd(一个gdb IDE)以及python来编写我的代码。
如果你愿意尝试与VS IDE不同的方法,可以考虑尝试vim。不过需要花费一定时间来适应它。

2
QT推出了一款新的IDE,看起来是Visual Studio的竞争对手。 - gbjbaanb

6

Eclipse CDT非常棒。虽然我仍然不时地使用Emacs,但我真的很喜欢它的索引、调用树、类型树、重构支持(尽管它不像Java重构那样好),等等。如果你自定义它,语法高亮功能也非常强大(可以为局部变量、函数参数、方法等设置不同的颜色)。代码补全功能也非常方便。我主要使用的是Eclipse 3.3,但3.4也很棒。

此外,我主要将其用于一个相对较大的项目(约1百万行代码),对于玩具项目来说可能有些过头了。


PS. Eclipse 3.4和CDT 5.0.2+非常稳定。对于大型代码库来说简直是天堂(我的主要项目有数百万行代码)。 - Pat Notz
我也使用CDT。Eclipse有一个SCons构建器插件。 http://nic-nac-project.org/~lothar/eclipse/update/SConsBuilderPlugin.html - lothar

5

您需要一个标准的工具链和集成开发环境。

关于标准工具链没有太多可说的。只需通过例如在Ubuntu/Debian上安装即可:

aptitude install build-essential

有趣的部分与IDE有关。
我个人的印象是,现在 - 在21世纪 - vi/emacs/make/autotools/configure对于开发某些规模以上的软件项目来说已经不够用了(...是的,请责备我这个异端,...)。
选择哪个IDE仅仅是品味问题。您会在SOF上找到很多主题。这里是一个永久链接,讨论哪个C++ IDE可能是“最好的”:C++ IDE for Linux

1
你用的是哪个老古董?Visual Studio 6.0吗?用“必须依赖IDE”扣一分,如果改成“相对而言需要”,则可退回这一分。 ;) - just somebody
啊!我用错了单词。我以为“heritage”是表达“亵渎”的非常复杂的方式。下次在发布之前我会先查阅我的德英词典的。 - anon
@just somebody:你对于“一定需要使用IDE”是正确的。我已经更改措辞。 - anon

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