ビルドシステム#
make
は最も一般的なビルドシステムの 1 つであり、ほとんどの UNIX ベースのシステムにインストールされていることがわかります。make
は完璧ではありませんが、中小規模のプロジェクトには十分です。make
を実行すると、現在のディレクトリにあるMakefile
という名前のファイルを参照します。
paper.pdf: paper.tex plot-data.png
pdflatex paper.tex
plot-%.png: %.dat plot.py
./plot.py -i $*.dat -o $@
コロンの左側はビルドターゲットであり、コロンの右側はそのターゲットをビルドするために必要な依存関係です。インデントされた部分は、依存関係をビルドする際に使用されるプログラムのセクションです。make
では、最初の命令はビルドの目的を指定し、引数なしでmake
を使用すると、最終的なビルド結果になります。または、次のようなコマンドを使用して他のターゲットをビルドすることもできます:make plot-data.png
。
$ cat paper.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[scale=0.65]{plot-data.png}
\end{document}
$ cat plot.py
#!/usr/bin/env python
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-i', type=argparse.FileType('r'))
parser.add_argument('-o')
args = parser.parse_args()
data = np.loadtxt(args.i)
plt.plot(data[:, 0], data[:, 1])
plt.savefig(args.o)
$ cat data.dat
1 1
2 2
3 3
4 4
5 8
依存関係の管理#
継続的インテグレーションシステム#
練習問題#
-
ほとんどの makefile には、
clean
という名前のビルドターゲットが用意されていますが、これはclean
という名前のファイルを生成するわけではありません。代わりに、それを使用してファイルをクリーンアップし、make を再ビルドできます。これは、すべてのビルドステップを「元に戻す」役割を果たすと考えることができます。上記の makefile でpaper.pdf
に対してclean
ターゲットを実装してください。ビルドターゲットをphonyに設定する必要があります。git ls-files
サブコマンドが役立つ場合があります。他の便利な make ビルドターゲットはこちらで見つけることができます。paper.pdf: paper.tex plot-data.png pdflatex paper.tex plot-%.png: %.dat plot.py ./plot.py -i $*.dat -o $@ .PHONY: clean clean: Rm *. Pdf *. Aux *. Log *. Png #git ls-files -o | xargs rm -f ~$ cat makefile paper.pdf: paper.tex plot-data.png pdflatex paper.tex plot-%.png: %.dat plot.py ./plot.py -i $*.dat -o $@ .phony: clean clean: mkdir -p Untrack rm -f *~ .*~ git ls-files -o | grep -v Untrack | xargs -r mv -u -t Untrack ~$ cat .gitignore Untrack # Set git to ignore this directory, used to put untracked files
-
バージョン要件を指定する方法はさまざまあります。Rust のビルドシステムの依存関係管理を学びましょう。ほとんどのパッケージ管理リポジトリは、同様の構文をサポートしています。各構文(尖括号、チルダ、ワイルドカード、比較、積)に対して、実際に意味のあるシナリオを構築してください。
-
Git は、単純な CI システムとして使用することができます。
.git/hooks
ディレクトリには、いくつかのファイルがあります(現在は非アクティブな状態です)。これらのファイルはスクリプトと同じように機能し、特定のイベントが発生したときに自動的に実行されます。pre-commit
フックを作成し、コミット前にmake paper.pdf
を実行し、ビルドに失敗した場合はコミットを拒否するようにしてください。これにより、ビルドできないバージョンのコミットが作成されるのを防ぐことができます。 -
GitHub Pagesを使用して、自動的に公開できるページを作成してください。このリポジトリにGitHub Actionを追加し、リポジトリ内のすべてのシェルファイルに対して
shellcheck
を実行してください(方法の 1 つ)。 -
独自のGitHub アクションを作成し、リポジトリ内のすべての
.md
ファイルに対してproselint
またはwrite-good
を実行してください。この機能をリポジトリで有効にし、エラーを含むファイルをコミットして機能が機能するかどうかを確認してください。