分享
 
 
 

GNU/Linux开发第一步

王朝system·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

目前,很多朋友学完了C语言,但并不能在GNU/Linux系统下进行编程开发。究其原因,GNU/Linux系统还未大面积普及是大碍之一,另外,人们不熟悉GNU/Linux系统下的开发工具也是关键。本文就是以“用例”的形式讲述在GNU/Linux系统下如何进行应用软件开发的基础和常识,为将来在GNU/Linux系统中进行大规模或企业级开发铺路。所谓“用例”,就是通过简单的例子来学习,最终达到能在自己的实际中应用的目的。

本文要求读者熟练Linux操作系统的常用操作,掌握C语言语法,能理解Linux系统的组成原理和了解Shell和Perl等脚本语言。

平台选择

首先,从事GNU/Linux(以下简你Linux)系统下的应用开发,应该有一个合适的操作平台和开发环境,所以选择和安装Linux操作系统成为Linux开发者的第一课。目前可供选择的Linux操作系统种类很多,如Red Hat(最新版名为Fedora)、SuSE、Mandrake和中科红旗(Red Flag),还有开源组织中有名的Debian等。虽然版本很多,但它们在底层系统组成上的差别是微乎其微的。我们以Red Hat 9.0为开发平台,以后的操作和开发都在这一系统平台上进行。

Linux操作系统内核底层的开发工具和辅助工具,有的是直接建立在内核基础上,如Shell、GCC和Make等;有的是建立在脚本语言的基础之上的,如Automake、Autoconf和Libtool等。它们是Linux操作系统外层的图形界面开发工具(GTK+、QT等)和网络应用开发工具(Perl、PHP和Python等)的基础和过渡。掌握了底层开发工具,对外层应用开发是有好处的,这样可以加快和优化外层应用开发,从而达到开发速度和开发质量的和谐统一。

慎选IDE

本文讲述的程序编辑工作多数是用Linux系统中常用的Emacs和vi来做,在终端窗口中进行命令编译调试。熟悉Windows下编程的朋友们会质疑为什么不用IDE(集成开发环境),是Linux下没有吗?答案当然是否定的。Linux下有很多IDE,事实上Emacs就是一个非常好的IDE,其它的还有CodeForge、ANJUTA和Kdeveloper等。对编程人员来说,IDE在编译控制的底层隐藏了很多东西,如果软件开发者真正了解和掌握了这些东西,对开发出更好的应用程序是大有帮助的。

对于IDE可以这么比喻,它好象是飞机上的自动驾驶仪,有了它飞行员会轻松许多,但如果飞行员没有真正掌握飞机的驾驶技术,在飞行中如果自动驾驶仪失灵的话,坠机是必然的,这样的飞行员是不能让他驾机的。编程人员也如此,只用IDE开发软件是不够的。

开始动手

坐谈论道不如起而躬行。下面就从一个简单的C语言源文件的编译开始,研究这些内容。

首先是安排好目录。在自己的用户目录下,创建一个总的目录learn-gnu,然后在此目录下创建第一个学习目录learn-1,在此目录下用Emacs编辑hello.c文件,输入如下内容:

//hello.c

#include

int main(int argc, char *argv[])

{

int i;

if(argc<=1)

{

printf("The program name is :%s\n", argv[0]);

}

else

{

printf("The program name is :%s\n", argv[0]);

for(i=1; i

printf("The argument %d is : %s\n", i, argv[i]);

}

}

这段代码试验了命令行参数及其简单的用法,正常情况下在终端中输入下面的命令即可编译:

# gcc hello.c -o hello

编译后输出可执行文件hello,执行./hello即可输出下面的语句:

The program name is :./hello

这是C语言初学者学到的最简单、最原始、最直接、也是最有效的编译方法,测试方法也是最简单的。因为所给用例的代码也比较简单,不用太复杂的方法。

这里没有用很经典的“Hello world”程序,其原因是笔者在辅导一些学生们学习C语言课程时,发现他们对这个程序还不太理解。

有没有更好的办法来编译这个源程序呢?可以编写一个简单的Makefile文件,使之自动编译源程序,生成可执行文件,表1为Makefile文件的内容。

CC = gcc 其中执行make或make all即执行all:

all: hello.c 后面的命令,即编译;

$(CC) hello.c -o hello make clean 就执行clean:后面的命令,

clean: 即清除编译结果。

rm hello -f

用Emacs编辑它并和上面的hello.c保存到同一文件目录,注意文件名为Makefile,然后,在终端中输入make命令,此时会出现下面的情况:

# make

# gcc hello.c -o hello

再执行列目录命令,会发现已生成可执行文件hello:

# ls

hello hello.c Makefile

下面是多个参数的输出结果,相信会对命令行参数有初步的了解。

# ./hello abc def 123

The program name is :./hello

The argument 1 is : abc

The argument 2 is : def

The argument 3 is : 123

Makefile是Make工具默认的配置文件,执行make命令时,Make自动查找Makefile文件。用多个C语言源文件来编译时,使用Make会让编译过程更加快捷有效。因为Make是按源文件的更新时间判断是否进行编译的,即改动了哪个文件就编译哪个文件,未改动的就不做处理。

这里以一个稍复杂的例子来说明。一个项目由三个C语言源文件a.c、b.c和hello.h构成,其中a.c和b.c中都包含hello.h,最终输出的可执行文件为hello。表2为这个Makefile文件的内容。

想进一步学习Make的使用和Makefile文件的编写,可以看一下它的参考文档,网址是http://www.gnu.org/manual/make-3.79.1/html_chapter/make_toc.html。

如果源程序再复杂一些,例如多一些源文件和附加一定数量的资源(如图像和文档等),或者涉及到系统中的其它支持(如需要系统安装有文档处理工具,语法检测工具,某些开发工具的开发库等)时,再编写Makefile文件就会变得非常麻烦,也非常容易出错。这种情况可以使用Autoconf 、Automake和Libtool等工具来完成这一工作,这让Makefile有更多的功能,编译更加完备,检测更加全面,而且还多出了安装、打包发布等更多新功能。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有