自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ninja:一個(gè)簡(jiǎn)單的構(gòu)建方式

系統(tǒng)
每隔一段時(shí)間,我就會(huì)發(fā)現(xiàn)一款我非常喜歡的新軟件,今天我想說(shuō)說(shuō)我最近喜歡的一款軟件:ninja!

[[350981]]

大家好!每隔一段時(shí)間,我就會(huì)發(fā)現(xiàn)一款我非常喜歡的新軟件,今天我想說(shuō)說(shuō)我最近喜歡的一款軟件:ninja!

增量構(gòu)建很有用

我做了很多小項(xiàng)目,在這些項(xiàng)目中,我想設(shè)置增量構(gòu)建。例如,現(xiàn)在我正在寫(xiě)一本關(guān)于 bash 的雜志,雜志的每一頁(yè)都有一個(gè) .svg文件。我需要將 SVG 轉(zhuǎn)換為 PDF,我的做法是這樣的:

  1. for i in *.svg
  2. do
  3. svg2pdf $i $i.pdf # or ${i/.svg/.pdf} if you want to get really fancy
  4. done

這很好用,但是我的 svg2pdf 腳本有點(diǎn)慢(它使用 Inkscape),而且當(dāng)我剛剛只更新了一頁(yè)的時(shí)候,必須等待 90 秒或者其他什么時(shí)間來(lái)重建所有的 PDF 文件,這很煩人。

構(gòu)建系統(tǒng)是讓人困惑的

在過(guò)去,我對(duì)使用 make 或 bazel 這樣的構(gòu)建系統(tǒng)來(lái)做我的小項(xiàng)目一直很反感,因?yàn)?nbsp;bazel 是個(gè)大而復(fù)雜的東西,而 make 對(duì)我來(lái)說(shuō)感覺(jué)有點(diǎn)神秘。我真的不想使用它們中的任何一個(gè)。

所以很長(zhǎng)時(shí)間以來(lái),我只是寫(xiě)了一個(gè) bash 腳本或者其他的東西來(lái)進(jìn)行構(gòu)建,然后就認(rèn)命了,有時(shí)候只能等一分鐘。

ninja 是一個(gè)極其簡(jiǎn)單的構(gòu)建系統(tǒng)

但 ninja 并不復(fù)雜!以下是我所知道的關(guān)于 ninja 構(gòu)建文件的語(yǔ)法:創(chuàng)建一個(gè) rule 和一個(gè) build

rule 有一個(gè)命令(command)和描述(description)參數(shù)(描述只是給人看的,所以你可以知道它在構(gòu)建你的代碼時(shí)在做什么)。

  1. rule svg2pdf
  2. command = inkscape $in --export-text-to-path --export-pdf=$out
  3. description = svg2pdf $in $out

build 的語(yǔ)法是 build output_file: rule_name input_files。下面是一個(gè)使用 svg2pdf 規(guī)則的例子。輸出在規(guī)則中的 $out 里,輸入在 $in 里。

  1. build pdfs/variables.pdf: svg2pdf variables.svg

這就完成了!如果你把這兩個(gè)東西放在一個(gè)叫 build.ninja 的文件里,然后運(yùn)行 ninja,ninja 會(huì)運(yùn)行 inkscape variables.svg --export-text-to-path --export-pdf=pdfs/variables.pdf。然后如果你再次運(yùn)行它,它不會(huì)運(yùn)行任何東西(因?yàn)樗梢愿嬖V你已經(jīng)構(gòu)建了 pdfs/variables.pdf,而且是最新的)。

Ninja 還有一些更多的功能(見(jiàn)手冊(cè)),但我還沒(méi)有用過(guò)。它最初是為 Chromium 構(gòu)建的,所以即使只有一個(gè)小的功能集,它也能支持大型構(gòu)建。

ninja 文件通常是自動(dòng)生成的

ninja 的神奇之處在于,你不必使用一些混亂的構(gòu)建語(yǔ)言,它們很難記住,因?yàn)槟悴唤?jīng)常使用它(比如 make),相反,ninja 語(yǔ)言超級(jí)簡(jiǎn)單,如果你想做一些復(fù)雜的事情,那么你只需使用任意編程語(yǔ)言生成你想要的構(gòu)建文件。

我喜歡寫(xiě)一個(gè) build.py 文件,或者像這樣的文件,創(chuàng)建 ninja 的構(gòu)建文件,然后運(yùn)行 ninja

  1. with open('build.ninja', 'w') as ninja_file:
  2. # write some rules
  3. ninja_file.write("""
  4. rule svg2pdf
  5. command = inkscape $in --export-text-to-path --export-pdf=$out
  6. description = svg2pdf $in $out
  7. """)
  8.  
  9. # some for loop with every file I need to build
  10. for filename in things_to_convert:
  11. ninja_file.write(f"""
  12. build {filename.replace('svg', 'pdf')}: svg2pdf {filename}
  13. """)
  14.  
  15. # run ninja
  16. import subprocess
  17. subprocess.check_call(['ninja'])

我相信有一堆 ninja 的最佳實(shí)踐,但我不知道。對(duì)于我的小項(xiàng)目而言,我發(fā)現(xiàn)它很好用。

meson 是一個(gè)生成 ninja 文件的構(gòu)建系統(tǒng)

我對(duì) Meson 還不太了解,但最近我在構(gòu)建一個(gè) C 程序 (plocate,一個(gè)比 locate 更快的替代方案)時(shí),我注意到它有不同的構(gòu)建說(shuō)明,而不是通常的 ./configure; make; make install

  1. meson builddir
  2. cd builddir
  3. ninja

看起來(lái) Meson 是一個(gè)可以用 ninja 作為后端的 C/C++/Java/Rust/Fortran 構(gòu)建系統(tǒng)。

就是這些!

我使用 ninja 已經(jīng)有幾個(gè)月了。我真的很喜歡它,而且它幾乎沒(méi)有給我?guī)?lái)讓人頭疼的構(gòu)建問(wèn)題,這讓我感覺(jué)非常神奇。 

 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2016-09-21 12:54:10

CAAS系統(tǒng)鏡像

2016-09-14 17:48:44

2018-09-17 15:12:25

人工智能神經(jīng)網(wǎng)絡(luò)編程語(yǔ)言

2011-03-24 09:34:41

SPRING

2009-08-19 04:14:00

線(xiàn)性鏈表

2018-11-22 14:09:45

iOS架構(gòu)組件開(kāi)發(fā)

2023-02-07 10:40:30

gRPC系統(tǒng)Mac

2009-07-14 16:02:42

JDBC例子

2015-12-04 11:36:04

SaaS架構(gòu)設(shè)計(jì)可持續(xù)

2017-11-23 08:30:26

編程Python擲骰子游戲

2014-12-08 10:03:47

IonicHybrid混合應(yīng)用

2020-11-30 13:16:29

Python編程語(yǔ)言

2011-09-08 13:41:53

Widget

2022-10-31 08:27:53

Database數(shù)據(jù)數(shù)據(jù)庫(kù)

2011-04-12 14:58:23

加密解密類(lèi)

2019-11-07 14:00:36

MySQL數(shù)據(jù)庫(kù)SQL

2021-11-04 10:29:01

CSS前端

2016-11-08 18:53:08

編譯器

2017-08-17 16:37:59

MySQL數(shù)據(jù)遷移

2013-04-25 09:55:21

進(jìn)程線(xiàn)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)