2006-6-24
小敘
之前寫很小的程序的時候,幾個源文件和編譯后的class文件統(tǒng)一都放在同一個目錄之下,倒也相安無事而且省事。但是在做畢設(shè)(坦克對戰(zhàn)游戲)的時候,多則二十個的源文件,再連同那些class文件都放在一個目錄下,顯得非常的雜亂。于是覺得是時候考慮一下一個project的目錄結(jié)構(gòu)了,例如把源文件和class文件分開,把測試文件也統(tǒng)一在另一個獨(dú)立的目錄下。

回顧和插曲
之前用C語言程序?qū)W習(xí)編寫小的編譯器的時候,我就曾不解怎么把一個程序分為幾個獨(dú)立的文件。那時的做法很傻但簡單,就是盡量不用.h頭文件,只使用.c文件,然后一層一層的include。后來看《The C Programming Language》第四章head files,才較為清楚地知道了怎樣通過.h文件來把一個程序分割為幾個小的源代碼文件。
這里有一個小的插曲,在3月末的研究生復(fù)式中,其中一道編程題是實(shí)現(xiàn)stack數(shù)據(jù)結(jié)構(gòu),提供push,pop和get的函數(shù)實(shí)現(xiàn),并提供一到兩個測試?yán)印N沂怯肅實(shí)現(xiàn)的,在實(shí)現(xiàn)過程中分為了三個文件,其中兩個.c文件和一個.h文件。分別是main.c stack.c and stack.h。
stack.h:定義了main.c and stack.c公用的stack struct變量,以及對main.c將需要用到的和在stack.c里由于函數(shù)定義順序的關(guān)系需要到的函數(shù)進(jìn)行了聲明(區(qū)別于定義)。
stack.c:include “stack.h”,定義了一系列函數(shù),可以為其它文件中所調(diào)用(這也是為什么這當(dāng)中的一些函數(shù)需要在stack.h中聲明的原因)。
main.c:include “stack.h”,使用到了stack.c中的函數(shù),也就是執(zhí)行了兩個測試?yán)佣选?BR>stack的具體操作實(shí)現(xiàn)細(xì)節(jié)這個略過了。考試的結(jié)果得了A,想必這種源代碼文件的組合關(guān)系也另評分的老師覺得清晰和有序:-)

原則
這方面的工具(build tool: 名字是構(gòu)建工具)最流行的好像是ant,在看《Developing Games in Java》的時候,作者也是通過提供build.xml給ant來完成相應(yīng)的工作,于是我嘗試把build.xml看明白了之后,第一印象就是它可以很好的處理一個project的各種文件的目錄結(jié)構(gòu):-),第二印象是又得使用不熟悉的工具了:-(。我覺得自己很懶,懶在不想學(xué)一些可能使用不多或不大有用的工具,同時覺得怕,怕在于這個ant是人家的,我害怕一個東西以我不清楚的方法和細(xì)節(jié)完成工作。這涉及一個學(xué)習(xí)新工具時候的原則問題:一,它好用嗎,可以meet my need嗎;二,它是怎么完成的啊,我想“看”清楚它的做法;三,夠簡單嗎。
ant是一個現(xiàn)成的魔術(shù),而我希望自己可以使用現(xiàn)掌握的簡單的知識做一個最簡單的而且合乎我要求的魔術(shù),而最要緊的是我知道它到底做了什么,它是怎么做了。

工作
現(xiàn)在我有必要自己來完成兩件事情:一:明確在一個project目錄下有什么目錄;二,我怎么實(shí)現(xiàn)把各種文件(如.java, .class, .jar, .html)存放到相應(yīng)的目錄并且讓它們和調(diào)的協(xié)作呢?我現(xiàn)在只懂編譯時候的-d參數(shù)和運(yùn)行時候的-cp參數(shù)。

(1)
嘗試學(xué)習(xí)ant的最簡的使用方法,記錄在"mynotes about ant -ant的最簡單使用方法.txt"文件中。
(2)
下面嘗試自己來構(gòu)建目錄結(jié)構(gòu),而不使用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文件并把文件的內(nèi)容顯示出來