LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1070|回复: 2

帮你快速构建linux下的编程环境

[复制链接]
发表于 2006-6-9 21:00:23 | 显示全部楼层 |阅读模式
本文试图通过介绍若干linux下的编程工具来帮助入门者快速构建一个集成编程环境。这里主要以C语言为例。文中包含了我个人的一些经验和体会,当然肯定会有一些偏失之处,欢迎指正。

在Windows下有很多集成的编程环境,比如VB,C++Builder等等,它们最大的优点就是可以让初学者很容易的上手。但是当转到Linux下时,很多时候会让人不知所措。四年前当我刚刚接触Linux下的编程时,只会cd和ls命令,我甚至不知道应该用什么东西编辑我的源代码,而当看到旁边的屏幕随着那些莫名其妙的命令不停翻滚的时候,我开始有些望而却步的想法了。

其实Linux下的编程并不象我们想象那样复杂和遥不可及,概括的来说还是分为编辑,编译和调试三步。在Windows下这三步所用到的工具全部被集成到一个环境中,只需点击几个按钮就可以完成。而在Linux下几乎每一步都有若干工具供选择。对熟练的用户来说这是一个优点,每个人都可以根据自己的喜好选择自己的工具,但是对于初学者来说就会让人有些无所适从了。所以本文首先从这三个方面来介绍相关的工具,最后,也是重点,介绍一个集成的环境,即eclipse+cdt。

一,编辑

Linux下历史最悠久功能最完善的编辑工具非vi和emacs莫属。最主要的共性就是都能高亮显示及自动格式化代码。只是最初使用的时候要记忆很多快捷键,这一点对习惯于用按钮和ctl+c, ctl+v的人来说有点难度。不过它们还是很值得一试的。通过这些快捷键可以大大提高编辑效率,另外也能了解一下不同的工作方式。

二,编译

Linux下编译源代码似乎都绕不开gcc,它所完成的任务和VC中那个Compile按钮大致一样,都是将源代码编译成可执行文件。所不同的是gcc要在命令行中执行,而且需要一定的参数格式才能让它知道你想让它干什么。对于helloworld这样的程序当然很简单,比如:
  1. gcc -o helloworld helloworld.c
复制代码
但是很多情况下就有些复杂了。通常Linux系统所提供的标准库(如c的库)的头文件放在/usr/include目录下,而库的目标代码则在/usr/lib目录下。gcc在编译的时候会自动到这些目录下去寻找相应的头文件和库文件。而在连接生成可执行代码时,有些库(.so之类)尽管在/usr/lib下,还是是需要我们明确告诉gcc需要连接它们。比如要用到libnet.so这个库:
  1. gcc -o helloworld helloworld.c -lnet
复制代码
如果我们的代码中引用到了一些不在这些默认目录下的库和头文件,我们还需要告诉gcc到那里去找,也就是额外的寻找路径:
  1. gcc -I/path/to/include -L/path/to/lib -o helloworld helloworld -lnet -lxxx
复制代码

另外gcc还有很多跟调试,优化等等相关的参数。所以我们会发现有时侯一条gcc的编译命令长得有些令人不可思议。

一个坏消息是,如果我们的程序分成很多源文件(大多数情况都是这样),我们不得不先把每个源文件都编译成目标代码,最后再连接成可执行文件。想想看手工输入这么多条长长的命令是一件多么令人沮丧的事情。和VC下一次简单的点击完全不能比。

不过令人庆幸的是为了完成这种繁重的重复性劳动,软件业的前辈们早就开发了一个叫make的工具来帮助我们。make依据一个Makefile文档来工作,而一个简单的Makefile文档其实就是以上那些gcc命令的集合。编辑好之后,只需输入make就可以让它自动运行这些编译命令。当然make的功能远不止这么简单。Makefile文档中的一个重要的概念就是目标,它用来告诉make要完成些什么工作。比如几乎所有的GNU标准的Makefile都应该有一个叫all的目标,顾名思义就是生成最终的结果。

对于稍微大一点的程序,大家都不会自己去写Makefile文档,而是用automake的工具来自动生成Makefile,当然这时候也会用到其它一些如autoscan, autolocal, autoconf等工具(http://autotoolset.sourceforge.net/tutorial.html)。这些工具的用法并不是三言两语就能描述的。虽然标准的GNU软件推荐使用这些工具,但我想初学者完全可以跳过它们。只需对make的工作方式有基本的了解就可以了。

三, 调试

gdb是命令行下的调试工具,通过不断的输入例如next来控制程序一步步执行,并可以通过print来查看当前某个变量的值。DDD是一个图形化的调试工具,emacs也可以用来调试。它们的优点就是可以同时看到程序执行到了代码中的那一行,但其实它们都是用的gdb。

四, 集成

以上我们可以看到在Linux下写一个软件需要了解许多不同的工具, 有些时候我们无法清楚的记得每一个参数的作用,容易把时间耗费在摆弄这些工具上。而通过集成能够在一定程度上减轻我们的负担。Linux下的集成环境有Eclipse, Emacs, Kdevelop, Anjuta等。 后三种中我用得最顺手的是Emacs,它是一个非常强大的工具,几乎无所不能。而Eclipse最初只是为java开发的,因为我期间一段与java的亲密接触是在Eclipse的见证下走过的,于是对这个工具也有特殊的偏好,所以这里着重想初学者推荐eclipse+cdt组合。

喝口水去 ;-)

(未完)
发表于 2006-6-9 21:11:06 | 显示全部楼层
Good, 应该对初学者有不小的帮助。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-9 22:38:34 | 显示全部楼层

eclipse与emacs相比最大的缺点是太耗内存,原来跑eclipse2.0写java的时候还感觉挺快的,但是后来到了3.x系列我的机器跑起来就有点吃力了。不过后来发现只装FC4中带的eclipse的基本框架和cdt,速度还可以接受。这个时候的eclipse已经成为纯的c/c++的集成环境了,因为没装jdt,呵呵。

在eclipse建一个工程有managed make c project和standard make c project的区别。顾名思义前者是eclipse会自动帮你建立并维护一个make用的Makefile文档(见图1,2),而后者需要你自己写Makefile。这里我碰到的问题是,如果我的一个工程中需要生成一个以上的可执行文件,我不知道如何在managed make c project中设置,或者能否设置。另外有些时候我们已经有了自己的Makefile, 比如从网上下载的别人发布的源代码包中。所以我只描述我是如何使用standard make c project的。

1.
首先建一个空standard make c project, 再导入那些已经解包的源代码。你会发现工程中应该有一个Makefile文件(左栏, c/c++ Projects视图, 图all.png)。随便在其中的一个文件上点右键,在弹出的菜单中选择Create Make Target ...。 然后再在弹出的窗口中给Makefile中已有的目标命个名(make.png)。 这里需要注意的是, make target框中的是Makefile中真正的目标,而target name框中的只是个别名,可以随意给。这也是 standard make c project 的一个好处,因为我可以在Makefile中定义好几个目标。

如果要编译,再次右击任意某个文件,选择build make target...。在弹出的窗口中可以选择某个目标进行编译(build.png)。


2.
在调试的时候也需要注意几点。首先同样是在左栏中的任意文件上点右键,在弹出的菜单中选debug as/debug...。然后在弹出的窗口需要进行些设置(debug.png),特别是对第一次调试。对于不同的可执行文件在c/c++ local application下有不同的对应项,如果没有就新建一项。然后在右边的main / c/c++ application中输入该可执行文件,在arguments中给出运行时的参数(如果需要的话),再在debugger/debugger中选择GDB Debugger,就可以开始调试了。剩下的操作在大多数集成环境中都是大同小异的。



结束语

我比较懒,没有把这篇文档写得很详细,而我也不准备把它写成一个全面的指南类的文章。文中提到的这些工具的具体使用方法网上已经有很多文章,中文的也不少。这里我只是简单的介绍了一下整个过程,以便初学者能有一个大致的了解。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表