利用cmake來搭建開發環境

對於常常在終端下寫程序的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> 易於學習,文檔易懂,只需牢記如下兩個命令便可:java

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.c++

相關文章
相關標籤/搜索