為什麼會選擇 make,cmake 之流來控制程序編譯,而不是用現成的腳本語言,如 Python?

https://github.com/kklook/wafbook_cn

wafbook翻譯項目求支援


js的test相關的一個庫叫mocha,測試的流程式控制制是使用cmake寫的。恩


就是哪個語言寫的就用什麼執行。

比如redis的集群用ruby寫的。安裝的時候就用ruby的環境。

hadoop用JAVA寫的。

python很好。但是有人就不用。也不是所有的方面都適合。


一分鐘理解make的用法:

你要生成的可執行文件 :源代碼文件列表

shell行,如果源代碼文件的時間比產出文件時間新,也就是接近於現在,則執行本行shell

我們把上述的一個整體叫做make的一條規則,其中源代碼文件列表可以是別的規則生成的可執行文件。

1)核心的idea,就是上述的這麼簡單的東西。於是,作者會想,自動編譯這麼小case的事情,用得著python來寫個庫嗎。

2)但是,你知道開源的世界,不像微軟或者apple,有「官方」的唯一的東西。源代碼都是公開的,你覺得不爽,你就加點功能。作者不爽你加的功能,你就新開個項目。於是,必然會帶來你覺得的臃腫和重複,雖然那些程序員添加功能的時候,心裡是覺得,這TMD的是如此的必要。

3)開源帶來了free,但是也帶來了diversity,你只是不習慣。


make實際包含了兩部分,一種語言,描述源代碼之間的依賴關係,即makefile;一個工具,按照依賴關係完成整個系統的構建,即make程序本身。如果是現在寫一個構建工具,多半會選擇python之類的語言來實現。


手寫make和cmake這個應該不現實了,多數時候都是用工具,比如Autoconf之類。


makefile只不過是搞研發的更清楚編譯流程和控制一些內存塊而已,要效率高當然是IDE!


python 寫的構建程序也有的,可以搜一下 bitbake

有一個項目叫做 yocto, 致力於方便其他組織企業構建自己的 linux 系統的, 核心就是 bitbake


用慣了手機支付理解不了為什麼以前會有現金,支票,信用卡


別說,還真有用python寫的編譯系統,比如Waf,GitHub - waf-project/waf: The Waf build system,現在Samba正在用這套,然而編譯尤其蛋疼,特別是交叉編譯到OpenWrt/LEDE上,waf還只支持Python 2系列。遠不如autoconf那一套舒服


這時候就看出rust的cargo是多麼方便了。


build項目,須要的是一種簡單的標籤式語言


cmake比make難?搞反了吧, autoconf/automake才是反人類的東西。

另外makefile出現的時代還沒有python或者perl。


cmake比Makefile已經簡單很多了,還有像其他一些類似cmake的東西,例如scons就是用python寫的


CMake官網的文檔sucks,推薦看這個 http://pan.baidu.com/s/1bp5NPMn

Makefile推薦看跟我一起寫Makefile-陳皓.pdf


看下SCONS吧。


不知道聽沒聽說過gn,谷歌已經放棄gyp了,可以學一下,新版的dsl更快的速度。因為是純c加加寫的!


使用CMake而不是python這類的腳本,一個重要原因恰恰是很好的跨平台。CMake本身是用C++寫的,所以CMake和你要編譯的應用有相同的依賴。一個平台支持C++編譯,就支持CMake。而python就額外需要目標平台有python解釋器。而只有C++編譯,沒有python的平台是大量存在的。

至於CMake奇葩的語法,這也是無奈的結果。CMake的作者在接受採訪的時候說過,在項目初始的時候,語言設計經驗不足,所以CMake語法坑很多。如果一切可以重來,他會選擇成熟的嵌入語言,比如lua。

EDIT:

搜了下訪談出處:

The Architecture of Open Source Applications: CMake


推薦閱讀:

TAG:Python | 編程 | 編譯軟體 |

分頁阅读: 1 2 3