2006-6-24
小叙
之前写很小的程序的时候,几个源文件和编译后的class文件统一都放在同一个目录之下,倒也相安无事而且省事。但是在做毕设(坦克对战游戏)的时候,多则二十个的源文件,再连同那些class文件都放在一个目录下,显得非常的杂乱。于是觉得是时候考虑一下一个project的目录结构了,例如把源文件和class文件分开,把测试文件也统一在另一个独立的目录下。

回顾和插曲
之前用C语言程序学习编写小的编译器的时候,我就曾不解怎么把一个程序分为几个独立的文件。那时的做法很傻但简单,就是尽量不用.h头文件,只使用.c文件,然后一层一层的include。后来看《The C Programming Language》第四章head files,才较为清楚地知道了怎样通过.h文件来把一个程序分割为几个小的源代码文件。
这里有一个小的插曲,在3月末的研究生复式中,其中一道编程题是实现stack数据结构,提供push,pop和get的函数实现,并提供一到两个测试例子。我是用C实现的,在实现过程中分为了三个文件,其中两个.c文件和一个.h文件。分别是main.c stack.c and stack.h。
stack.h:定义了main.c and stack.c公用的stack struct变量,以及对main.c将需要用到的和在stack.c里由于函数定义顺序的关系需要到的函数进行了声明(区别于定义)。
stack.c:include “stack.h”,定义了一系列函数,可以为其它文件中所调用(这也是为什么这当中的一些函数需要在stack.h中声明的原因)。
main.c:include “stack.h”,使用到了stack.c中的函数,也就是执行了两个测试例子而已。
stack的具体操作实现细节这个略过了。考试的结果得了A,想必这种源代码文件的组合关系也另评分的老师觉得清晰和有序:-)

原则
这方面的工具(build tool: 名字是构建工具)最流行的好像是ant,在看《Developing Games in Java》的时候,作者也是通过提供build.xml给ant来完成相应的工作,于是我尝试把build.xml看明白了之后,第一印象就是它可以很好的处理一个project的各种文件的目录结构:-),第二印象是又得使用不熟悉的工具了:-(。我觉得自己很懒,懒在不想学一些可能使用不多或不大有用的工具,同时觉得怕,怕在于这个ant是人家的,我害怕一个东西以我不清楚的方法和细节完成工作。这涉及一个学习新工具时候的原则问题:一,它好用吗,可以meet my need吗;二,它是怎么完成的啊,我想“看”清楚它的做法;三,够简单吗。
ant是一个现成的魔术,而我希望自己可以使用现掌握的简单的知识做一个最简单的而且合乎我要求的魔术,而最要紧的是我知道它到底做了什么,它是怎么做了。

工作
现在我有必要自己来完成两件事情:一:明确在一个project目录下有什么目录;二,我怎么实现把各种文件(如.java, .class, .jar, .html)存放到相应的目录并且让它们和调的协作呢?我现在只懂编译时候的-d参数和运行时候的-cp参数。

(1)
尝试学习ant的最简的使用方法,记录在"mynotes about ant -ant的最简单使用方法.txt"文件中。
(2)
下面尝试自己来构建目录结构,而不使用ant。记录在"2006-06-24build project.doc"文件中。


----------------------------
附录一:bat批处理文件中常用的命令
date /t
time /t

mkdir or md
del /Q or earse /Q
rmdir or rd

echo
@echo off
rem
pause

date /t > a.txt | type a.txt //间接地建立一个a.txt文件并把文件的内容显示出来