標籤:os 使用 java ar 檔案 div sp 代碼 on
對於經常在終端下寫程式的non-windows程式員,Makefile絕對是最常用的工具,小到一個檔案的簡單的測試程式,大到數百個檔案的商業軟體,只需要有shell,一個make命令就可得到可啟動並執行程式,Makefile絕對功不可沒;可惜世界中不是那麼太平,不但各個Posix系統的API千差萬別,硬體平台各異,就連Makefile本身也有多個不相容的格式,譬如GNU Makefile 拿到Solaris平台上就沒法make下去,除非你有gmake,但gmake對並行編譯的支援就沒有solaris內建的dmake要好了。
GNU autotools提供了一個不錯的選擇,可以做到組織工具鏈來產生所需的Makefile,但缺陷是學習起來比較麻煩,而且模版檔案寫起來比較費勁。老實說我跟Makefile打了近3年的交道,幾乎沒有自己寫過automake指令碼,相反的工作倒是幹了不少,譬如分析產生的Makefile運行過程,然後類比自己手寫Makefile;得到一個輕爽的定製環境。
除了autotools,其實也有不少其他的工具,譬如apache的ant,基於Python的scons;ant在java界是鼎鼎大名了,可惜對c++的支援確實讓我感覺很不習慣;scons號稱可以嵌入Python代碼,用起來也算簡單,但是想實現複雜的功能就很頭疼了,而且運行速度讓人撓頭。
cmake則彌補了上述幾個工具的諸多缺陷:
1> 易於學習,文檔易懂,只需牢記以下兩個命令即可:
cmake --help
cmake --help-command-list
cmake --help-command xxx
cmake --help-variable-list
cmake --help-variable yyy
2> 以文字檔組織,利用cache的方式,所有的自訂cache變數可直接用vim查看。
3> 產生的Makefile檔案簡潔易懂
4> 編譯器選項可自己在ccmake中編輯,利於交叉編譯
5> 支援整合ctest/cpack,前者可以方便的做單元測試,後者則可以打包產生tgz/rpm
6> 支援多個產生器,可以產生eclipse/codeblocks/gmake/unix make檔案,甚至可以產生VC各個版本的dsw/sln.
7> 內嵌語言,可以自己寫函數、宏等
對於經常寫小測試程式的人來說,在test目錄下加上個CMakeLists.txt,裡邊加上幾行簡單的語句就可以方便的以後重複使用了。對於這種情況,手工寫的Makefile碰到依賴檢測這種麻煩的事情往往力不從心,automake又太小題大作,而cmake則恰到好處了。
對於大型程式,cmake可以自己定製產生的中間檔案和目標檔案路徑,有效避免了automake帶來的每個目錄下產生一大堆檔案的弊端,也不需要手工寫Makefile。
最有用的是可以產生多個知名IDE的工程檔案,包括Windows下的vc6-vc9.
利用cmake來搭建開發環境