make
ディレクトリが存在している場合だけ処理する方法, ifでフロー制御 ( GNU Make ) 改良
ディレクトリが存在している場合だけ処理する方法 でも書いたのだが、もっとスマートな方法があったので追記。
Makefile で、 あるディレクトリが存在しているかどうかで処理を分岐させる方法。
→ if と シェルのコマンドを組み合わせて解決する。
ファイルが存在している場合だけ処理する方法, ifでフロー制御 ( GNU Make )
たとえば、
- カレントディレクトリに patch.txt が存在していた場合だけ、patchを適用したい。存在していなければ何もしない。
そんな作業をするMakefileを書くには if を使えばよい。
ディレクトリが存在している場合だけ処理する方法, ifでフロー制御 ( GNU Make )
Makefile で、CSVやSubversionレポジトリからソースツリーを作業ディレクトリにエクスポートしてビルドするような場合...
たとえば、
以下のようなMakefileを書いた場合ですが、
make clean したときに、作業ディレクトリが存在しないとエラーになります。
GNU Makeでの if 関数による 実行制御
Makeでは、条件に応じて処理を変えられることが判明。
以下の例では、カレントディレクトリに index.html が 存在している場合は、proc-a マクロを実行、そうでない場合は proc-b マクロを実行します。
Makefileでカレントディレクトリ内のディレクトリだけを抽出して使う(サブディレクトリのみ列挙)
ブログ管理用の Makefile を書いているのだが、カレントディレクトリ以下にあるサブディレクトリだけを列挙したい。 サブディレクトリは、時間とともに変化するので、 Makefileに直に書くのはやめたい。
2009-07-08 追記
Cygwinだけでなく、Ubuntu(Linux)でもこのMakefileを使ったところ、CygwinとUbuntu で ls の出力形式が異なるため ここで説明した方法では、うまくディレクトリをリストアップできなくなってしまった。
Jython を使った代替案
Java用のちょっとしたMakefile
普段はAntを使ってjavaをビルドしているが、 ちょっとしたテスト用クラスのコンパイルに役立つMakefile.
Makefileの中でワイルドカードを使ってファイルを指定する方法
カレントディレクトリに複数のXMLファイル(*.xml)があり、 これをHTMLに変換したい。 このときMakeを使って、更新されたファイルだけ変換するようにしたいがどうすればいいか。
前提条件
- 変換コマンドは /bin/toHtml とする( 標準入力からXMLを入れて、標準出力にHTMLが出力される )
- xmlからhtmlに変換するときファイル名は拡張子以外は一致させる foo.xml → foo.html
- XMLファイルはどんどん増えていく