2.1.2 使用Terminal

有些人可能不想从学习使用Xcode开始Objective-C程序设计之旅。如果习惯于使用UNIX shell和命令行工具,可能会用Terminal应用程序编辑、编译和运行程序。下面说明如何使用Terminal执行上述操作。

第一步:启动Mac上的Terminal应用程序。Terminal应用程序位于Application文件夹下,存储在Utilities中。其图标如图2-9所示。

2.1.2 使用Terminal - 图1

图 2-9 Terminal程序图标

启动Terminal应用程序,将看到一个类似于图2-10的窗口。

命令要在每一行的$(或者%,这取决于Terminal应用程序的配置)之后键入。如果熟悉UNIX的使用,这是很容易理解的。

2.1.2 使用Terminal - 图2

图 2-10 Terminal窗口

首先,需要将代码清单2-1中的程序行输入到一个文件中。可以从创建一个用于存储这个程序例子的目录开始。然后,还必须运行一个文本编辑器(例如vi或者emacs)来输入这个程序:


sh-2.05a$mkdir Progs创建一个存储程序的目录

sh-2.05a$cd Progs转到新目录

sh-2.05a$vi Prog1.m启动文本编辑器来输入程序

..


注意在前一个例子以及本书的其余部分中,由你(即用户)输入的命令都用黑体表示。

对于Objective-C文件,可以选择要使用的任何名;只要确保最后两个字符是.m即可。这样编译器就知道有一个Objective-C程序。

将程序输入到文件中之后,可以使用名为gcc的GNU Objective-C编译器来编译并链接这个程序。gcc命令的一般格式为:


gcc-framework Foundation files-o progname


该选项说明你要使用有关Foundation框架的信息:


-framework Foundation


要记住在命令行上使用该选项。files表示一列将要编译的文件。在我们的例子中,这样的文件只有一个,我们将其命名为prog1.m。如果编译时没有任何错误,那么包含这个可执行文件的文件名将是progname。

我们把这个程序名为prog1;则下面是用于编译第一个Objective-C程序的命令行:


$gcc-framework Foundation prog1.m-o prog1 Compile prog1.m&call it prog1

$


命令提示符在返回时没有附带任何消息,这意味着编译器没有在程序中发现错误。现在,可以在命令提示符后键入名称prog1来继续执行这个程序:


$prog1 Execute prog1

sh:prog1:command not found

$


除非事先已使用Terminal,否则,很可能得到上面的结果。导致这种情况的原因是:UNIX的shell(即运行该程序的应用程序)并不知道prog1位于何处(我们不在这里讲述所有细节),所以此时有两种选择:其一,将字符./放在程序名之前,以便告知shell在当前目录查找要执行的程序。其二,将用于存储程序的目录(或者只是当前目录)添加到shell的PATH变量中。此处采用第一种方法:


$./prog1 Execute prog1

2008-06-08 18:48:44.210 prog1[7985:10b]Programming is fun!

$


应该注意的是,通过Terminal编写和调试Objective-C程序是一个有效的方法。但是,这并不是很好的长期策略。如果想构建Mac OS X或iPhone应用程序,除了可执行文件,还有很多文件都需要“打包”到应用程序软件包中。在Terminal中执行这些操作并不容易,而Xcode则对此很擅长。因此,我建议你首先学习如何使用Xcode开发程序。这样学起来有一定的难度,但所有努力最终会证明是值得的。