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文件并把文件的內容顯示出來