利用CC命令在Unix上编译C程序


    众所周知,在Unix操作系统上可以通过C语言来编写实用的小工具,如编写一个小闹钟程序等等。那么是否需要通过专业的C语言编译工具来编译C语言呢?答案是否定的。在Unix操作系统中,专门提供了CC命令来帮助系统工程师编译C语言。如此的话,就不用在操作系统上再安装专业的C语言编译工具。这里顺便说一句,在Linux操作系统中也可以通过C语言来编写程序。如在SUN的Linux操作系统中,采用的是gcc命令,不过两者的用法是类似的。对于大部分Unix系统工程师来说,可能还不怎么熟悉这个命令。笔者就对这个命令使用过程中容易出现问题的地方做一些解释。

  一、根据源代码文件函数的不同分别生成不同的文件。

  在使用cc命令编译C语言源程序文件(以c扩展名结尾),根据源程序文件内容的不同,会产生不同的文件。在源程序文件中如果含有main函数的话,则其直接会生成可执行文件,以out扩展名结尾。如果没有main函数的话,则会生成目标文件,以o文件为扩展名。可执行文件可以直接运行;但是如果是目标文件的话,不能够直接运行。还需要把目标文件链接成可执行文件。对于这一点Unix系统工程师需要特别的注意。如果为了节省后续的工作量,则最好在编译时main函数代码已经完成。

  在C源程序代码中,可以包含多个函数。但是main函数只能有一个。或许有些系统工程师有过Java语言的编程经验。其实这个main 函数就好像是Java语言源文件中的Public类。是实现某个特定功能的路口。在使用cc命令进行编译的时候,必须写全全名,即要带上扩展名。另外需要注意的是,在Unix操作系统中大小写是敏感的。如果输入的文件名字大小写错误的话,则编译过程就会以失败而告终。

  二、可执行文件的名字管理。

  假设现在有一个C语言源程序文件printtest.c。在这个源程序文件中有一个main函数,主要用来向屏幕输出处理的结果。此时系统工程师就可以使用命令cc printtest.c来进行编译。注意,此时在编译的过程中,笔者并没有指定可执行文件的名字。而编译完成后,系统会自动生成可执行文件a.out。也就是说,这个可执行文件的名字是系统自动生成的。默认情况下就是a.out。由于编译源程序时,往往只会生成一个可执行文件,所以也就不用担心重复。编译成功后,系统工程师可以利用系统的一些命令,如mv命令来对这个可执行文件重命名。

  不过有些系统工程师可能希望在编译的时候就直接指定可执行文件的名字,以减少后续重命名的麻烦。这也是可以的,不过就是需要加入一个可选项。如系统工程师可以通过-o 可选项,让cc命令直接将可执行文件写入到指定的文件中而不生成a.out文件。如系统工程师可以使用cc –o pirnttest printtest.c命令来实现。注意目标文件名写在前面,源程序文件名字写在后面。通常情况下,系统工程师还可以同时指定可执行文件的保存路径。即在目标文件名字前面加入绝对路径或者相对路径即可。如此执行cc命令之后,系统就会把可执行文件存放在系统工程师指定的目录中,并以指定的命令进行命名。最后生成的可执行文件跟已开始生成的a.out可执行文件是相同的。只是文件名字不同而已。

  三、编译多个c语言源程序文件。

  cc命令是一个比较强大的C语言程序编译命令。其不仅可以对单个C语言源程序文件进行编译。而且还可以同时多多个C语言源程序文件进行编译。如现在有一个生成随机数的C语言程序,其一共需要用到三个源程序文件。一个是结果打印源程序,其中有一个main函数。这个函数的主要功能是,接受用户输入的参数(需要随机数的位数、以日期还是以CPU温度为基准来生成随机数);根据用户输入的参数来调用对应的文件(另外有两个文件分别为suijishua与suijishub,分别实现一种类型的随机数生成方法);并把最终的结果输出到屏幕上。可见带main函数的文件主导着整个随机数生成程序的运行。

  虽然这个三个源程序文件可以合并为一个源程序文件。但是这会让简单的事情复杂化,会增加文件的复杂程度。这不利于后续的升级与维护。为此在编写应用程序的时候,无论其规模有多大,往往会根据其功能把一个功能代码放在多个源程序代码文件中。这种模块化的设计,非常的灵活。而现在系统工程师面临的问题就是,能否同时编译这三个源程序代码文件。如果不能够的话,则需要先逐个编译生成目标文件,然后再把它们链接成一个可执行文件。显然这么出来起来的话,工作量会比较大。其实在利用cc命令,可以同时编译多个源程序代码文件。其书写也很简单,只需要在稍微调整一下上面这个命令,将源程序代码文件名字从一个写为多个。如此的话,在编译的时候就可以同时编译多个源程序代码文件,并最终生成一个可执行文件。其实这个过程的话,有两个步骤完成。首先系统会逐个编译每个源程序代码文件。编译成功后,会把相关的文件链接成一个可执行文件。

相关内容