1. 程式人生 > >編譯工具make、gmake、cmake、nmake和Dmake的區別

編譯工具make、gmake、cmake、nmake和Dmake的區別

現有編譯工具

-----------------

      gmake是GNU Make的縮寫。       Linux系統環境下的make就是GNU Make,之所以有gmake,是因為在別的平臺上,make一般被佔用,GNU make只好叫gmake了。       比如在安裝二進位制檔案進行編譯時要使用make命令,但如果在Solaris或其他非GNU系統中執行,必須使用GNU make,而不是使用系統自帶的make版本,這時要用gmake代替make進行編譯。       Solaris包含兩種make工具:GCC (GNU Compiler Collection)工具套裝包括一個 C 編譯器和一個 C++ 編譯器,Solaris自身的 make 實用程式。

      freebsd自帶的make是BSD make。兩者的不同在於Makefile部分不相容。即使是部分,有時候也不能完全把軟體給make出來。

      另外,windows下自帶的make叫做nmake喲。

 跨平臺的編譯工具

------------------------

       Dmake是同GNU Make類似的一個工具。其命令格式自成一體,但是可以適用於Linux, Solaris, and Win32 and other platforms。Dmake有一個變種,被OpenOffice.org使用。dmake 是一個命令列工具,與 make(1) 相容。dmake 能夠以網格、分佈、並行或序列模式生成目標。如果使用的是標準 make(1) 實用程式,在對 makefile 進行任何更改時可以毫不費力地過渡到使用 dmake。dmake 是 make 實用程式的超集。

      跨平臺的編譯工具,其中最有名的兩個是 cmake 和 scons,cmake 之所以出名估計是因為 KDE 4 從 autotools 轉向用 cmake 來編譯。而 scons 則是 lighttpd 原來用的編譯工具,它現在也轉向 Python 了。

     cmake 和 python 大概代表了新一代跨平臺編譯工具的兩種方向。第一種 (cmake) 是延續並改良傳統 automake, autoconf 工具鏈,將之合為一體,但最終仍然生成 Makefile, Visual Studio 的 .sln,Xcode 的 .xcodebuild 檔案,依賴現有編譯工具 (make, nmake, vcbuild, xcodebuild) 來編譯;第二種則是完全消除現有編譯工具的呼叫,直接呼叫編譯器,scons 就屬於這一類 (scons 還有一個特點是完全不用專門的語言,控制編譯的指令碼就是 Python)。      從人氣上 來說,反倒是走改良路線的 cmake 比 scons 好一些,有幾個原因:scons 基於 Python,可能有些程式碼不是很照顧速度,於是類似 KDE 這樣的大專案編譯起來會很慢;scons 開發比較慢,最近一直只是 bugfix。不過相對 cmake,scons 的優點是文件非常細緻可讀,而 cmake 的文件則非常少,可以在網上找到的只有幾篇介紹性的文章和參考手冊,不像 scons 有一本 User Guide。      與之相關的工具還有 Jam (包括它的變體 FTJam, Boost.Build), Waf, Bakefile 等。其中比較新的 Waf 是一個 scons 的改進,在它的提供的 benchmark 中,顯示通過快取方式可以大大改進編譯的速度。不過因為這個專案還很新,目前沒有什麼軟體用它作為編譯系統。      Bakefile 走的則是 cmake 的路子,從名稱上也可以看出,它最終也是通過生成 Makefile 一類的檔案來完成編譯的。不過不同的地方在於 cmake 用的語法很像 autotools 用的 m4 的傳統語法,而 bakefile 則完全用 XML 來定義編譯規則了,這一點倒很像 ant。Bakefile 倒是有不少著名的專案使用,比如 wxWidgets, WebKit, VCF, libxml。