| [ << LilyPond 入力ファイルの記述に対する提案 ] | [トップ][目次][インデックス] | [ GNU Free Documentation License >> ] |
| [ < トラブルシュート ] | [ 上へ : LilyPond 入力ファイルの記述に対する提案 ] | [ GNU Free Documentation License > ] |
5.5 Make と Makefile
LilyPond を実行できるほとんどすべてのプラットフォームが
make というソフトウェアをサポートします。このソフトウェアは Makefile という名前の特殊なファイルを読み込みます。ファイル Makefile は、ファイルの依存関係と、あるファイルから別のファイルを作り出すためにオペレーティング システムに渡す必要があるコマンドを定義します。例えば、Makefile は LilyPond を実行して
ballad.ly から ballad.pdf と ballad.midi を作り出す方法を記述します。
自身の便利さのためかソース ファイルにアクセスしてくれる他の人のために、自身のプロジェクト用に Makefile を作成することが良い場合があります。これが当てはまるのは、多くのインクルード ファイルと複数の出力オプション
(例えば、フル スコア、パート スコア、指揮譜、ピアノ譜など) を持つ
非常に大きなプロジェクト、あるいは、ビルドするために複雑なコマンドを必要とするプロジェクト
(lilypond-book プロジェクトなど)
です。Makefile の複雑さと自由度は、必要性と作者のスキルに応じて、さまざまです。プログラム GNU Make は
GNU/Linux ディストリビューションと MacOS X にインストールされていて、Windows でも利用可能です。
make の使い方についてのすべての詳細は
GNU Make マニュアル を参照してください。これから示すのは make でできることのほんの一例です。
Makefile の中に規則を定義するためのコマンドは、プラットフォームによって異なります。例えば、さまざまな種類がある GNU/Linux と MacOS は bash を使いますが、Windows は cmd を使います。MacOS X では、コマンド ライン インタプリタを使用するためにシステムをコンフィグレーションする必要があるということに注意してください。ここで、Makefile の例をいくつか
GNU/Linux/MacOS 用と Windows 用の両方のバージョンで示します。
最初の例は、4 楽章のオーケストラのためのもので、以下のようなディレクトリ構造を持ちます:
Symphony/ |-- MIDI/ |-- Makefile |-- Notes/ | |-- cello.ily | |-- figures.ily | |-- horn.ily | |-- oboe.ily | |-- trioString.ily | |-- viola.ily | |-- violinOne.ily | `-- violinTwo.ily |-- PDF/ |-- Parts/ | |-- symphony-cello.ly | |-- symphony-horn.ly | |-- symphony-oboes.ly | |-- symphony-viola.ly | |-- symphony-violinOne.ly | `-- symphony-violinTwo.ly |-- Scores/ | |-- symphony.ly | |-- symphonyI.ly | |-- symphonyII.ly | |-- symphonyIII.ly | `-- symphonyIV.ly `-- symphonyDefs.ily
Scores ディレクトリと Parts ディレクトリの中にある
.ly ファイルは音符を
Notes ディレクトリの中にある .ily ファイルから取得します:
%%% top of file "symphony-cello.ly" \include ../symphonyDefs.ily \include ../Notes/cello.ily
この Makefile はターゲットとして
score (フル スコアの楽曲全体)、movements (フル スコアの個々の楽章)、それに parts (演奏者のための個々のパート) を持ちます。さらに、web や email で配布するのに適したソース ファイルの tarball
(訳者: 複数のファイルをコマンド tar で 1 つのファイルにまとめたもの)
を作成するターゲット archive もあります。ここでは GNU/Linux や MacOS X 用の Makefile を示します。これをプロジェクトのトップ ディレクトリに
Makefile という名前で保存する必要があります:
Note: ターゲットやパターン ルールが定義されたとき、そのあとの行はスペースではなく Tab で始まる必要があります。
# 出力ファイル名
piece = symphony
# いくつプロセッサがあるかを決定します
CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
# lilypond を実行するコマンド
LILY_CMD = lilypond -ddelete-intermediate-files \
-dno-point-and-click -djob-count=$(CPU_CORES)
# この Makefile で使用される拡張子
.SUFFIXES: .ly .ily .pdf .midi
# 入力ファイルと出力ファイルのサーチは VPATH 変数でリストアップされている
# ディレクトリの中で行われます。それらのディレクトリはすべて (GNU make 変数
# `CURDIR' によって与えられる) カレント ディレクトリのサブディレクトリです。
VPATH = \
$(CURDIR)/Scores \
$(CURDIR)/PDF \
$(CURDIR)/Parts \
$(CURDIR)/Notes
# LY 入力ファイルから PDF ファイルと MIDI ファイルを作成するための
# パターン ルール。.pdf 出力ファイルは `PDF' サブディレクトリの中に
# 配置され、.midi ファイルは `MIDI' サブディレクトリの中に配置されます。
%.pdf %.midi: %.ly
$(LILY_CMD) $<; \ # this line begins with a tab
if test -f "$*.pdf"; then \
mv "$*.pdf" PDF/; \
fi; \
if test -f "$*.midi"; then \
mv "$*.midi" MIDI/; \
fi
notes = \
cello.ily \
horn.ily \
oboe.ily \
viola.ily \
violinOne.ily \
violinTwo.ily
# 楽章の依存関係
$(piece)I.pdf: $(piece)I.ly $(notes)
$(piece)II.pdf: $(piece)II.ly $(notes)
$(piece)III.pdf: $(piece)III.ly $(notes)
$(piece)IV.pdf: $(piece)IV.ly $(notes)
# 総譜の依存関係
$(piece).pdf: $(piece).ly $(notes)
# パート譜の依存関係
$(piece)-cello.pdf: $(piece)-cello.ly cello.ily
$(piece)-horn.pdf: $(piece)-horn.ly horn.ily
$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily
$(piece)-viola.pdf: $(piece)-viola.ly viola.ily
$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily
$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily
# 4 つすべての楽章のフル スコアを 1 つのファイルとして生成するには
# `make score' とタイプします。
.PHONY: score
score: $(piece).pdf
# すべてのパートを生成するには `make parts' とタイプします。
# 楽器 `foo' のためのパートを生成するには `make foo.pdf' とタイプします。
# 例: `make symphony-cello.pdf'
.PHONY: parts
parts: $(piece)-cello.pdf \
$(piece)-violinOne.pdf \
$(piece)-violinTwo.pdf \
$(piece)-viola.pdf \
$(piece)-oboes.pdf \
$(piece)-horn.pdf
# 4 つの楽章を別個のファイルとして生成するには `make movements' とタイプします。
.PHONY: movements
movements: $(piece)I.pdf \
$(piece)II.pdf \
$(piece)III.pdf \
$(piece)IV.pdf
all: score parts movements
archive:
tar -cvvf stamitz.tar \ # this line begins with a tab
--exclude=*pdf --exclude=*~ \
--exclude=*midi --exclude=*.tar \
../Stamitz/*
Windows プラットフォームには特別な面倒さがあります。Windows 用の GNU Make をダウンロードしてインストールした後、システム環境変数に正しいパスを設定して、DOS シェルが Make プログラムを見つけられるようにする必要があります。これを行うには、"マイ コンピュータ" を右クリックして、プロパティ を選択し、それから 詳細設定 を選択します。それから 環境変数 をクリックして、システム環境変数 パネルの中にある Path をハイライトしてから
編集 をクリックして、GNU Make の実行ファイルへのパスを追加します。そのパスは以下のようになります
(訳者: GNU Make のインストールのされ方によって異なります):
C:\Program Files\GnuWin32\bin
Linux/MacOS X とは異なるシェル コマンドを扱い、いくつかのデフォルト システム ディレクトリの中に存在するファイル空間を扱うために、Makefile 自体を変更する必要があります。Windows は tar コマンドを持たないため、archive ターゲットは除去されます。また、Windows が持つ MIDI ファイルのデフォルト拡張子は異なります。
## WINDOWS VERSION
##
piece = symphony
LILY_CMD = lilypond -ddelete-intermediate-files \
-dno-point-and-click \
-djob-count=$(NUMBER_OF_PROCESSORS)
#get the 8.3 name of CURDIR (workaround for spaces in PATH)
workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
do @echo %%~sb)
.SUFFIXES: .ly .ily .pdf .mid
VPATH = \
$(workdir)/Scores \
$(workdir)/PDF \
$(workdir)/Parts \
$(workdir)/Notes
%.pdf %.mid: %.ly
$(LILY_CMD) $< # this line begins with a tab
if exist "$*.pdf" move /Y "$*.pdf" PDF/ # begin with tab
if exist "$*.mid" move /Y "$*.mid" MIDI/ # begin with tab
notes = \
cello.ily \
figures.ily \
horn.ily \
oboe.ily \
trioString.ily \
viola.ily \
violinOne.ily \
violinTwo.ily
$(piece)I.pdf: $(piece)I.ly $(notes)
$(piece)II.pdf: $(piece)II.ly $(notes)
$(piece)III.pdf: $(piece)III.ly $(notes)
$(piece)IV.pdf: $(piece)IV.ly $(notes)
$(piece).pdf: $(piece).ly $(notes)
$(piece)-cello.pdf: $(piece)-cello.ly cello.ily
$(piece)-horn.pdf: $(piece)-horn.ly horn.ily
$(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily
$(piece)-viola.pdf: $(piece)-viola.ly viola.ily
$(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily
$(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily
.PHONY: score
score: $(piece).pdf
.PHONY: parts
parts: $(piece)-cello.pdf \
$(piece)-violinOne.pdf \
$(piece)-violinTwo.pdf \
$(piece)-viola.pdf \
$(piece)-oboes.pdf \
$(piece)-horn.pdf
.PHONY: movements
movements: $(piece)I.pdf \
$(piece)II.pdf \
$(piece)III.pdf \
$(piece)IV.pdf
all: score parts movements
次の Makefile は、LaTeX で処理する lilypond-book ドキュメント用です。このドキュメントは目次を持ちます。目次を作成するには、リンクを更新するために latex コマンドを 2 回実行する必要があります。.pdf 出力ファイルは out ディレクトリに保存され、HTML 出力ファイルは htmlout ディレクトリに保存されます。
SHELL=/bin/sh
FILE=myproject
OUTDIR=out
WEBDIR=htmlout
VIEWER=acroread
BROWSER=firefox
LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
PDF=cd $(OUTDIR) && pdflatex $(FILE)
HTML=cd $(WEBDIR) && latex2html $(FILE)
INDEX=cd $(OUTDIR) && makeindex $(FILE)
PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
all: pdf web keep
pdf:
$(LILYBOOK_PDF) # begin with tab
$(PDF) # begin with tab
$(INDEX) # begin with tab
$(PDF) # begin with tab
$(PREVIEW) # begin with tab
web:
$(LILYBOOK_HTML) # begin with tab
$(HTML) # begin with tab
cp -R $(WEBDIR)/$(FILE)/ ./ # begin with tab
$(BROWSER) $(FILE)/$(FILE).html & # begin with tab
keep: pdf
cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # begin with tab
clean:
rm -rf $(OUTDIR) # begin with tab
web-clean:
rm -rf $(WEBDIR) # begin with tab
archive:
tar -cvvf myproject.tar \ # begin this line with tab
--exclude=out/* \
--exclude=htmlout/* \
--exclude=myproject/* \
--exclude=*midi \
--exclude=*pdf \
--exclude=*~ \
../MyProject/*
TODO: make this thing work on Windows
この Makefile は Windows では機能しません。Windows ユーザの代替手段として、ビルド コマンドを保持する簡単なバッチ ファイルを作成する方法があります。これは Makefile のように依存関係を保持できませんが、少なくともビルド処理を単一のコマンドに縮小します。以下のコードを
build.bat あるいは build.cmd として保存してください。このバッチ ファイルは DOS プロンプトから実行することができ、単にそのアイコンをダブル クリックすることでも実行することができます。
lilypond-book --output=out --pdf myproject.lytex cd out pdflatex myproject makeindex myproject pdflatex myproject cd .. copy out\myproject.pdf MyProject.pdf
参照
アプリケーションの使用方法: コマンド ラインの使用方法, lilypond-book
| [ << LilyPond 入力ファイルの記述に対する提案 ] | [トップ][目次][インデックス] | [ GNU Free Documentation License >> ] |
| [ < トラブルシュート ] | [ 上へ : LilyPond 入力ファイルの記述に対する提案 ] | [ GNU Free Documentation License > ] |