[ << LilyPond 入力ファイルの記述に対する提案 ] | [Top][Contents][Index] | [ GNU Free Documentation License >> ] |
[ < トラブルシュート ] | [ Up : 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 入力ファイルの記述に対する提案 ] | [Top][Contents][Index] | [ GNU Free Documentation License >> ] |
[ < トラブルシュート ] | [ Up : LilyPond 入力ファイルの記述に対する提案 ] | [ GNU Free Documentation License > ] |