Linux初步(二)——Linux 简单编程

编程,我们都会,但是具体经历哪些步骤,我们都清楚嘛?打开VC,新建一个文件,编写完后,F5运行,这就是所有的步骤?VC把太多的底层实现封装了,使你几乎不用关心底层的操作。而Linux中,一览无余。

 

总的来说,简单流程如下:

编辑 -> 编译 -> 链接 -> 运行。

 

首先,当然是要编辑源文件,用什么编辑器?VI,对,就是它,Windows下也不乏它的身影,跨平台的优秀编辑软件,扯远一点,“这个世界上有三种程序员,一种用VIM (VI升级版),一种用Emacs的,还有一种用其他”。足见VIM在编辑器领域的地位。关于VIM更详细的讨论可以上网搜索。不论如何,我们可以使用“vi hello.c”来新建或修改一个叫hello.c的文件。

 

接着,你需要一个编译器来编译,在Linux下,最著名的编译器便是gcc,它能编译c、c++、object c等多种语言。gcc 的具体使用请man 之,但是我说几个简单的用法,-c 参数使得gcc只执行编译(默认会编译后自动链接),-o 参数可以知道生成文件的名称,gcc 后可接多个文件参数来组合编译(就像这样:gcc hello.c fun.c –o hello)这样就可以处理文件的包含关系了。

值得一提的是,我在使用gcc的过程中,发现它并不能直接编译cpp文件。查看其man page 以后才明白,gcc 是不会自动去链接stl 库的,必须安装一个g++ 的程序来调用stl 库给gcc 编译,这点我不是太确定,请指正(英文不好,怕误解)。其原文如下:

"However, the use of gcc does not add the C++ library.  g++ is a program that calls GCC and treats .c, .h and .i files as C++ source files instead of C source"

大约在manual page gcc(1) 的 570 行左右。

 

但是,光有gcc是不够的,倘若你需要编译一个有几十上百个文件的工程呢?难不成写一个脚本来运行?其实我们有更好的选择,使用Makefile 组织代码,并用make命令解析 Makefile文件的内容,完成编译工作。随便在网上查找一下,你会发现Makefile的功能非常强大,它可以设置文件的依赖,可以配置工程的不同编译模式,可以调用任何你想调用的外部程序,等等。因为Makefile的方便和扩展性,被广泛用于各类开源工程中。

下面提供一个简单的Makefile例子,如下:

all: hello.o fun4hello.o

        g++ hello.o fun4hello.o

 

hello.o: hello.cpp

        g++ -c hello.cpp

 

fun4hello.o: fun4hello.cpp

        g++ -c fun4hello.cpp

 

Makefile使用的是声明各个文件的依赖关系,冒号前面是标记,也是make命令将检测的文件名(若被修改或不存在,将重新执行该条命令,如hello.o 若被修改,make命令将重新执行hello.o对应的 g++ -c hello.cpp 命令),另外,all和clean 被赋予了特殊意义,不代表文件名。再另外,你其实也可以写成以下形式:

all: hello

 

hello: hello.o fun4hello.o

        g++ hello.o fun4hello.o –o hello

 

hello.o: hello.cpp

        g++ -c hello.cpp

 

fun4hello.o: fun4hello.cpp

        g++ -c fun4hello.cpp

这样,你又可以检测最后的生成文件hello 是否需要重新生成了。

 

请注意,冒号前面的内容是可以任意替换的,它之代表一个标签及需要检测的文件名,与对应命令生成的文件没有关系。也就是说,如果你不使用生成文件的文件名,那此条语句将每次都被执行,因为make命令发现需要检查的文件不存在。

 

关于Makefile的具体使用,我也不是很清楚,毕竟这只是个课程的总结,可以查阅相关资料,嘿嘿。

 

PS:命令 touch filename 可以使 filename 的状态变成被修改,非常形象~

 

OK,今天了解到的 Linux系统的简单编程大概就这些内容了。下节预告:“Linux 内核定制”,敬请期待~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值