フリーソフトの小道   

愛用のフリー・ソフト

第33回 ファイル更新管理   「make」   〜 文書更新の自動化ツール 〜

パート@  「makefile」 に更新手順が書かれている

 プログラミングに際し、多数のファイルに分割して管理することが多くある。 大規模なアプリケーションソフトの開発現場では、多人数でソフト開発を行うため1つのファイルでソフトウエアを管理することは不可能になる。 また、一人で開発する場合でも、アプリケーションの機能を細分化して、それぞれを分割して作成するのが普通である。

具体的事例: PDF版 「微分方程式の教科書」 のための 「makefile」

 今回そのような作業での個別のファイル管理をするときに使用するツール 「make」 を、具体例に基づいて紹介してみよう。 取り上げた事例は、「物理の小道」 の 「番外編」 にある「PDF版 物理における微積分学の教科書」 を作成に際に使ったものを取り上げる。 この教科書は、TeX を使って書かれたPDF文書であるので、TeXで書かれたソースリスト(ダウンロード可能です)を、LaTeX でコンパイルし、 dvi ファイルを作り、dviファイルをpdfファイルとする。このような作業手順を一括して記述するのが 「makefile」 である。

 この 「makefile」 の記述について数回にわたって紹介する。 まずは、その 「makefile」 がどのようなものなのかを見ていただこう。



#=========================#
# TeX Standard Makefile
#   makefile for TEX
# Copyright by H.Takata
#=========================#

PRO = 微分方程式		# Main Title

ORIENT = portrait		# sheet layout
#ORIENT = horizontal		# sheet layout

SRC  = $(PRO).tex		# 

#----------------------------------------
# Include Files
#----------------------------------------
INC1 = $(PRO)-intro.tex 

INC2 = $(PRO)-base.tex $(PRO)-main.tex $(PRO)-exercise.tex

INC3 = $(PRO)-appendix.tex $(PRO).ind

#FIG  = 			# Include figure-files

#----------------------------------------

.tex.dvi	:
	platex $<

.dvi.pdf	:
	dvipdfm $<

#---------------------------------------

$(PRO).dvi      : $(SRC) $(INC1) $(INC2) $(INC3) $(FIG) makefile
	-platex $(SRC)

$(PRO).pdf       : $(PRO).dvi tex-src.pdf
	dvipdfm $(PRO).dvi

$(PRO).ps       : $(PRO).dvi
	dvipsk $(PRO).dvi

$(PRO)-src.tex  : $(SRC) $(INC1) $(INC2) $(INC3) $(PRO)-version.tex
	!make -B src

tex-src.pdf     : $(PRO)-src.tex tex-src.tex makefile
	!platex tex-src.tex
	!dvipdfm tex-src.dvi

view-dvi        : 
        c:\dviout\dviout $(PRO).dvi

view-pdf	: $(PRO).pdf tex-src.pdf
	-!acroread $(PRO).pdf

view-src	: tex-src.pdf
	!acroread tex-src.pdf

view-ps		: $(PRO).ps
	c:\ghostgum\gsview\gsview32 -o $(ORIENT) $(PRO).ps

index           :
        mendex -g $(PRO)
        !make $(PRO).dvi

src		:
	!echo %%==========================================%% >$(PRO)-src.tex
	!echo %% このファイルは自動的に作成されたものです %% >>$(PRO)-src.tex
	!echo %%==========================================%% >>$(PRO)-src.tex
	!ftype.bat makefile $(PRO)-src.tex
	!ftype.bat 微分方程式.tex $(PRO)-src.tex
	!ftype.bat 微分方程式-intro.tex $(PRO)-src.tex
	!ftype.bat 微分方程式-base.tex $(PRO)-src.tex
	!ftype.bat 微分方程式-main.tex $(PRO)-src.tex
	!ftype.bat 微分方程式-exercise.tex $(PRO)-src.tex
	!ftype.bat 微分方程式-appendix.tex $(PRO)-src.tex
	!ftype.bat tex-src.tex $(PRO)-src.tex

all             : $(PRO).pdf  tex-src.pdf
	-platex $(SRC)		# 目次、索引などの相互関係処理のため
        -mendex $(PRO)		# 索引並べ替え処理
	-platex $(SRC)		# 索引つき文書作成のため
        -dvipdfm $(PRO).dvi	# PDF作成
	acroread $(PRO).pdf	# PDF閲覧
	!make clean		# 作業ファイル削除

clean		:
	del $(PRO)*.aux



makefile の中の 「#」 マーク以降はコメント部分

 makefile には更新作業の手順を記載する。分かりにくい記述規則があるので順に説明してみよう。 最初に説明するのは「コメント記述」の記号 # であり、最初にある5行のコメント部分には、タイトル等が書かれている。 その後にも同様の多数のコメント部分があるのがお分かりだろう。

マクロ機能とその利用法

 記述について、同じ部分をマクロ記述として、省略形で記述できる。 この部分が7行目の 「PRO = 微分方程式」 という部分だ。この記述以降に現れる 「$(PRO)」 は全て 「微分方程式」 に置き換わるのだ。 これくらいの文字列ならマクロで書かなくても作業上では変わらないのだが、長い文字列では作業上非常に有効となる。

 「INC2 = $(PRO)-base.tex $(PRO)-main.tex $(PRO)-exercise.tex」 のマクロなら、「$(INC2)」は「微分方程式-base.tex 微分方程式-main.tex 微分方程式-exercise.tex」 という長い文字列を表している。 このように、マクロの中にマクロを組み込むこともできるのだ。

更新作業手順の記述は次回に紹介する

 makefile の記述のうち、コメントとマクロについて紹介した。 実際の更新作業手順を記述している部分は少し分かりにくい。 詳しく紹介するには数回のシリーズになりそうだから、次回に続くことにしよう


2006/01/02  管理人(志)


感想・意見は、掲示板、または メールでどうぞ! --- 管理人(志)