Home About
Bash , Make , Ubuntu

ディレクトリが存在している場合だけ処理する方法, ifでフロー制御 ( GNU Make )

Makefile で、CSVやSubversionレポジトリからソースツリーを作業ディレクトリにエクスポートしてビルドするような場合...
たとえば、 以下のようなMakefileを書いた場合ですが、 make clean したときに、作業ディレクトリが存在しないとエラーになります。

Makefile (1)

# 作業ディレクトリ
workdir := __workdir

foo.jar    : $(workdir)
	@ant
	@cp $(workdir)/foo.jar .

$(workdir) : 
	@svn export svn://foobar.net/hogehoge/trunk $@

clean      :
	@cd $(workdir); ant clean

cleanall   :
	@$(RM) -r $(workdir)

これでは、作業ディレクトリが存在しないときに、 make clean すると、エラーになります。
これを防ぐには、if を使用して、作業ディレクトリが存在しているときだけ、処理をするように変更します。

Makefile (2) if を使用して改良

# 作業ディレクトリ
workdir := __workdir

foo.jar    : $(workdir)
	@ant
	@cp $(workdir)/foo.jar .

$(workdir) : 
	@svn export svn://foobar.net/hogehoge/trunk $@



define do-ant-clean-in-workdir
	@cd $(workdir); ant clean
endef


workdirexists := $(shell find ./ -name $(workdir))
clean :
	$(if $(workdirexists) ,$(do-ant-clean-in-workdir))
cleanall   :
	@$(RM) -r $(workdir)