Wilhel

Wilhel

元プログラミング

ビルドシステム#

makeは最も一般的なビルドシステムの一つであり、ほぼすべての 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

依存関係管理#

継続的インテグレーションシステム#

練習問題#

解答を参照してください。

  1. ほとんどの 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 place untracked files
    
    
  2. バージョン要件を指定する方法はさまざまです。Rust のビルドシステムの依存関係管理を学びましょう。ほとんどのパッケージ管理リポジトリは、同様の構文をサポートしています。各構文(尖括号、チルダ、ワイルドカード、比較、積)に対して意味のあるシナリオを構築してください。

  3. Git は、単純な CI システムとして使用することができます。.git/hooksディレクトリには、いくつかのファイルがあります(現在は非アクティブな状態です)。これらのファイルはスクリプトと同様の役割を果たし、特定のイベントが発生したときに自動的に実行されます。pre-commitフックを作成し、コミット前にmake paper.pdfを実行し、ビルドに失敗した場合はコミットを拒否するようにしてください。これにより、ビルドできないバージョンのコミットが作成されるのを防ぐことができます。

  4. GitHub Pagesを使用して、自動的に公開できるページを作成してください。このリポジトリにGitHub Actionを追加し、リポジトリ内のすべてのシェルファイルに対してshellcheckを実行してください(方法の一つ)。

  5. 独自のビルドを作成し、リポジトリ内のすべての.mdファイルに対してproselintまたはwrite-goodを実行してください。この機能をリポジトリで有効にし、エラーを含むファイルをコミットして機能が機能しているかどうかを確認してください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。