小谈在linux下的编程

  一个月前左右,鄙人切了30G左右硬盘容量,装了个ubuntu,当时认为只兴趣玩玩.然而那个兴趣一发不可收拾,深深热爱上了linux.引用一鸟哥的两句话说:

    在windows下你完成不了某件事时你可以尽情骂它,在linux你完成了某件事时你应该感激它.

    windows是让我们服从于它,linux是让我们做它的主人.

  自从鄙人开始启用linux后,也喜欢并习惯了命令行.当现,命令行对于现在的程序员来说是可有可无的东西,现在的IDE太多也太优秀了.随便一个点击就可以生成工程,编译,然后运行,在命令行下绝不是这么简单.因此也有很多认认为命令行是旧时代的东西了,不再需要.其实,这样的思想对于一个经常用命令行来操作的程序员来说是多么的幼稚天真.命令行绝不是你想像中的复杂,命令行也并不是你想像中的低效率,而是刚好想反.至于详细如何,这里不再累赘.只举一个例子:  当像想进入某个经常使用文件夹,如C:\dsf\sdf\d\myworkspace,你可以

轻易计算出第次为完成这一任务你至少要点击4次鼠标键,而当你用命令行时你可以想出N种方案来简化这一操作:

  如: alias myspace=C:\dsf\sdf\d\myworkspace (linux下,当然这里只为了举例,这个路径在linux下是不会存在的).

  这样以后,你每次只需输入myspace就可以进入目的文件了.当然,windows也有很好的解决方案,但习惯于windows的图形界面的我很难会在windows想一个解决问题的方案.这是悲剧的事.本人没有丁点鄙视windows的意思,相反,我喜欢windows.

  

  在linux编程,或者可以这么说,作为一个程序员,vim这种命令行式的编辑器是不可不学的(个人认为).个人推荐程序员都学一下vim.记得vim的创作人说过:vim是为程序员设计的编辑器.

  vim真正解放你的双手,让你真正感受到coding的乐趣. 

  当你开始接触vim的时候,你很可会受这样或那样的迷惑,如:vim似乎只方便于编辑单文件程序,当做一个工程时它就没辙了.

  接下来就是我要介绍的另一个强大的武器,[make].

  做一个项目时,我们习惯地打开vs,新建工程,添加文件...然后写代码.编译的时候,轻轻按一下F5或点一下"生成程序".我这里并不是说这一种做法不好或哪一种做法更优,我只想说其实还有一种方案很有趣,让人很有成就感,那就是自己动手写Makefile,当你掌握一点makefile的知识后,可能你会更注重工程上的设计,会考虑更加效率的解决问题的方法,因为Makefile的自由度高,由代码实现的东西可以让你随心所欲做你认为值得做和想做的事.

  用鄙人写的一个小小聊天室程序为例:

    工程需要生成两个可执行程序,服务器端(server)与一个客户端(client)程序,当然在vs或其他IDE中你可以建立两个工程来做.根据鄙人的做法,server与client几乎有一半的代码是一样的,也就是说它们有很大的一部份实现是共同的,如引用一个函数来解释网络字节的IP.在IDE中,我们可以方便地用[Ctrl+c]+[Ctrl+v]实现.我喜欢的做法是新建个文件为common,里面放者一些通用的实现文件,也就是一些通用的函数或类,然后生成.o文件,让要用到这些函数的源文件直接连接.o文件就行了.这里就要依赖于Makefile来实现了, 下面展示一下:

       .    

在server与client都要写一个Makefile,让它告诉编译器如何生成可执行文件.下面是server的Makefile内容,client类似,只要用vim命令[:%s/server/client/g]就可以更改为client的Makefile文件了:

 CC=g++

server: server.o ../common/exfunction.o ../common/myHead.h
    ${CC} server.o ../common/exfunction.o -o server

server.o: server.cpp ../common/myHead.h
    ${CC} -c server.cpp -o server.o

exfunction.o: ../common/exfunction.cpp ../common/myHead.h
    ${CC} -c ../common/exfunction.cpp -o ../common/exfunction.o

  

  <代续>

  当然,鄙人还是个什么都不会的菜鸟,这里只是菜鸟的一个小小感受.希望不会让您感到困惑.


posted on 2010-11-14 15:58  Kenfly  阅读(339)  评论(0编辑  收藏  举报