与现在GUI(图形用户接口)中,是以数据文件为中心。比如你双击一个.txt文件,会自动为你打开文本编辑器,并用文本编辑器打开这个.txt文件。但 是在命令行中,以程序为中心。要打开一个文本文件,必须先运行文本编辑器,再用文本编辑器打开这个文本文件。下面先讲解MS的 cmd再说Unix的shell。
在MS-DOS的时代,系统引导之后就会启动command.exe程序,再由command.exe去启动别的程序。现在你可以通过附件,命令提示符来启动cmd窗口。
这时你可以在提示符后面敲命令了。比如你敲一个cl -o hello hello,.c。这时cmd程序会分析这行命令,首先找cl。有些命令由cmd程序本身提供称之为内部命令,比如cd改变目录,dir列当前目录。显然C语言编译器cl不是cmd的内部命令。然后cmd就会在当前目录下找这个cl.exe,显然也没有。之后cmd就开始找PATH环境变量了。等等!你说什么是环境变量?环境变量就是系统运行时对每个程序都有效的一组变量,对于windows系统,我的电脑->属性->高级->环境变量就会出现:
这有两类,上面是当前用户的环境变量,下面是全局的环境变量。可以看到由一个叫PATH的环境变量。这个环境变量是一组目录名。
前面说到cmd,在当前目录也找不到cl.exe之后,就会找PATH环境变量,从PATH指示的目录一个一个的找。直到找到一个下有一个叫cl.exe的可执行文件为止。要是一个也找不到就会报告错误。找到之后,就会执行cl,并把后面的-o hello hello.c传递给cl,这个就是命令行参数。也就是main的参数。还有一点要注意的编译器是找hello.c文件可不会去找PATH变量,最好把hello.c放在当前目录下。
Unix系统下每一个用户一旦登陆,就会为用户启动一个shell程序。这时会出现一个提示符。这个提示符可能不同,$, #等等。执行gcc -o hello hello.c, 执行过程和windows的类似。有一点不同,就是Unix的shell不会在当前目录下找gcc。就是说Unix的shell不会在当前目录下找可执行文件。要是当前目录下有一个叫gcc的可执行程序,你必须敲./gcc,其中.表示当前目录。
顺便说下一个通用的相对路径, “.”表示当前目录,”..”表示上级目录。比如D:/xx/yy/zz/下有一个hello.c, 当前目录在D:/xx/yy/tt,那么命令就要变成cl -o hello ../zz/hello.c。
好了到这里,是不是知道对如何编译一个C程序了。