嘗試新的構造系統 Ninja

2022-02-21 10:20:23 字數 2004 閱讀 9881

ninja 是 chrome 專案的構建工具,用來替換經典工具 make,目前這個開源工具已經被很多其它專案採用。據專案作者描述,建立這個新的構建工具,主要是為了提公升大型專案的編譯速度。

由於 ninja 的設計目標之一是「必須易於嵌入大型構建系統」,所以,像寫 makfile 那樣手寫規則檔案,並不是它的目標; ninja 的專案作者說,ninja 構建檔案使用的語言「簡單到了不便於人類書寫」的程度。ninja 的規則檔案中,並沒有條件語句或是基於檔案字尾的規則,相反,有的僅僅是乙個個列表。這些列表記錄了確切的輸入檔案路徑,以及所產生的確切結果。因為這種簡單的表達並不需要額外的解釋,所以,在執行時,這些規則檔案能夠被快速載入。 

所以,通常情況下,使用 ninja 時需要乙個額外的工具,來實現高層次的構建概念理解。好在已經有很多現成的工具來完成這件事,比如鼎鼎大名 cmake,已經可以直接生成 ninja 的規則檔案。

今天實驗用到另乙個超小的基於 python 的工具,pyrate-build。專案作者描述它是乙個「build file generator targeting ninja」。

1. 安裝

ninja 並不需要額外的依賴,你可以直接使用相應平台的二進位制檔案,linux 或者 windows;安裝不安裝的都無所謂。當然,linux 下最好還是用 apt-get 之類的安裝。它的 windows  可執行檔案只有 500k。

pyrate-build 的安裝更簡單,它只需要乙個檔案。所以,同樣的,你也可以直接把它放到編譯目錄下。或者使用 pip 來安裝。

我這裡在 linux 下作的實驗,ninja 是用 apt 裝的,pyrate-build 指令碼直接放在了編譯目錄下。

2. 編譯

只嘗試了 pyrate-build 官網上的實驗:

$ echo -e '

#include \nint main()

' > test.cpp

$ echo -e "

executable('test', 'test.cpp')

" >build.py

$ python pyrate build.py

$ ninja

$ ./test

然後,修改了 build 目錄,對 build.py 做了簡單修改。

default_context.basepath = '

build

'default_context.basepath_object_file = '

build/obj

'

executable('test', 'test.cpp')

當然,指定目錄似乎還有很多其他的方式,暫不作深入研究。

所以,如果你在 windows 下組織乙個獨立於 ide 的新專案,你只需要乙個 500k 的二進位制檔案,以及乙個 python 指令碼,就可以輕鬆組織構建啦~

想用 ninja 作為微控制器的構建工具,但是**商的編譯器不支援生成 depfile,所以考慮先使用 gcc 作為 depfile 的生成工具。下面的指令碼實驗可行,考慮有空了進行整合:

cc = c:\tools\mingw\bin\gcc

source_path=..\02_sw\01_sources\

opts=-mmd -mf

cc_flags = -i$source_path\02_mcal\ -i$source_path\03_mcal_generated -i$source_path\04_os -mm

rule dep_gen

command = $cc $cc_flags $in $opts $out

description = dep_gen(c) $out

build build/obj/adc.c.d: dep_gen $source_path\02_mcal\adc.c

build build/obj/base.c.d: dep_gen $source_path\02_mcal\base.c

嘗試新的器材配置

現在越來越覺得吃住球是打好桌球的關鍵。我的弧圈算比較轉的,但是主要是靠薄摩擦。缺點還是很明顯的,一是速度慢,二是依賴套膠的粘性。平時也接觸過一些桌球的專業教練,人家用光不出溜的老化膠皮,一樣可以把球拉的很衝很轉,其中的訣竅就是教練能吃住球。有鑑於此,我現在嘗試著用銀河w6配兩面土星專業版 硬度中 一...

乙個新的儲存系統嘗試 WOFS

乙個新的儲存系統嘗試 wofs 我對以往的所有的儲存系統的感覺中,燒錄光碟是我的最愛,儘管我一直沒有燒錄機,但是cdr式燒錄光碟卻是一種給我全新感覺的儲存方式.以下談談它的優點.可燒錄光碟作為worom write once read only memory 的一種,其實我最喜歡的還是他的woro....

嘗試一種新的帶人方式

嘗試一種新的帶人方式 最早帶人時,沒有什麼經驗,我總是覺得他們做事太慢。慢得讓我受不了時,乾脆幫他們把 和文件都寫了。一般情況下,也勉強能趕上進度。但這占去了我大部分業餘時間,搞我很累,他們似乎也不領情。我也知道這不是辦法,他們成長很慢,我也只能乾著急。軟體中的 bug很多,這也在意料之中,這樣差的...