成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ninja:一個簡單的構建方式

系統
每隔一段時間,我就會發現一款我非常喜歡的新軟件,今天我想說說我最近喜歡的一款軟件:ninja!

[[350981]]

大家好!每隔一段時間,我就會發現一款我非常喜歡的新軟件,今天我想說說我最近喜歡的一款軟件:ninja

增量構建很有用

我做了很多小項目,在這些項目中,我想設置增量構建。例如,現在我正在寫一本關于 bash 的雜志,雜志的每一頁都有一個 .svg文件。我需要將 SVG 轉換為 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 腳本有點慢(它使用 Inkscape),而且當我剛剛只更新了一頁的時候,必須等待 90 秒或者其他什么時間來重建所有的 PDF 文件,這很煩人。

構建系統是讓人困惑的

在過去,我對使用 make 或 bazel 這樣的構建系統來做我的小項目一直很反感,因為 bazel 是個大而復雜的東西,而 make 對我來說感覺有點神秘。我真的不想使用它們中的任何一個。

所以很長時間以來,我只是寫了一個 bash 腳本或者其他的東西來進行構建,然后就認命了,有時候只能等一分鐘。

ninja 是一個極其簡單的構建系統

但 ninja 并不復雜!以下是我所知道的關于 ninja 構建文件的語法:創建一個 rule 和一個 build

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

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

build 的語法是 build output_file: rule_name input_files。下面是一個使用 svg2pdf 規則的例子。輸出在規則中的 $out 里,輸入在 $in 里。

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

這就完成了!如果你把這兩個東西放在一個叫 build.ninja 的文件里,然后運行 ninja,ninja 會運行 inkscape variables.svg --export-text-to-path --export-pdf=pdfs/variables.pdf。然后如果你再次運行它,它不會運行任何東西(因為它可以告訴你已經構建了 pdfs/variables.pdf,而且是最新的)。

Ninja 還有一些更多的功能(見手冊),但我還沒有用過。它最初是為 Chromium 構建的,所以即使只有一個小的功能集,它也能支持大型構建。

ninja 文件通常是自動生成的

ninja 的神奇之處在于,你不必使用一些混亂的構建語言,它們很難記住,因為你不經常使用它(比如 make),相反,ninja 語言超級簡單,如果你想做一些復雜的事情,那么你只需使用任意編程語言生成你想要的構建文件。

我喜歡寫一個 build.py 文件,或者像這樣的文件,創建 ninja 的構建文件,然后運行 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 的最佳實踐,但我不知道。對于我的小項目而言,我發現它很好用。

meson 是一個生成 ninja 文件的構建系統

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

  1. meson builddir
  2. cd builddir
  3. ninja

看起來 Meson 是一個可以用 ninja 作為后端的 C/C++/Java/Rust/Fortran 構建系統。

就是這些!

我使用 ninja 已經有幾個月了。我真的很喜歡它,而且它幾乎沒有給我帶來讓人頭疼的構建問題,這讓我感覺非常神奇。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2016-09-21 12:54:10

CAAS系統鏡像

2016-09-14 17:48:44

2018-09-17 15:12:25

人工智能神經網絡編程語言

2011-03-24 09:34:41

SPRING

2009-07-14 16:02:42

JDBC例子

2018-11-22 14:09:45

iOS架構組件開發

2009-08-19 04:14:00

線性鏈表

2023-02-07 10:40:30

gRPC系統Mac

2015-12-04 11:36:04

SaaS架構設計可持續

2020-11-30 13:16:29

Python編程語言

2014-12-08 10:03:47

IonicHybrid混合應用

2017-11-23 08:30:26

編程Python擲骰子游戲

2011-09-08 13:41:53

Widget

2020-03-26 17:00:53

HashMapputJava

2010-04-19 17:21:36

Oracle寫文件

2021-07-20 10:30:46

Golanghttp語言

2020-09-29 15:08:47

Go UI框架開發

2018-09-18 10:11:21

前端vue.jsjavascript

2011-04-12 14:58:23

加密解密類

2019-11-07 14:00:36

MySQL數據庫SQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲第一中文字幕 | 我要看黄色录像一级片 | 毛片免费在线 | 亚洲天堂久久新 | 国产视频一区在线 | 国产精品日韩高清伦字幕搜索 | 日韩中文字幕av | 国产精品夜间视频香蕉 | 日韩一区二区av | 欧美2区 | 国产精品久久久久久久久久久久久久 | 男女羞羞视频在线观看 | 中文字幕的av | 午夜丁香视频在线观看 | 久久久99精品免费观看 | 操皮视频 | 欧美日本在线观看 | 一区二区三区四区不卡 | 欧美在线一区二区三区 | 日本三级网站在线观看 | 欧美一区二区三区精品免费 | 久产久精国产品 | 亚洲精品在线91 | 日韩一级不卡 | 国产精品99999999 | 日韩国产三区 | 毛片入口 | 久久一区二区三区免费 | 日韩免费视频一区二区 | 99热这里都是精品 | 国产目拍亚洲精品99久久精品 | 亚洲综合色视频在线观看 | 在线免费小视频 | 在线观看国产视频 | 精品一区二区观看 | 一区二区三区在线免费观看 | 99pao成人国产永久免费视频 | 一呦二呦三呦国产精品 | 丝袜美腿av | 午夜视频在线免费观看 | 欧美一区二区三区日韩 |