« 「怯む」の読み仮名 | トップページ | 【C/C++】 演算子のオーバーロード »

【make】 makeファイルでの多重ターゲット定義

なんか久しぶりの更新やなぁ。
ネタは色々あるのやけど、書く時間が無くて...

え〜と、またまた覚書きですな。

本職は組み込みソフトの開発エンジニアで、趣味もそれに近いものがあるんで色々な開発環境を使う必要があるわけです。Windowsのアプリだけ開発するって言うのであれば、素直にVisual Studioを使えば良いのだけど(今ならExpress Editionは無料やしね)、Linuxの環境と揃えたり、ましてや組み込み系の環境なんてどうなるか分からんので、都度開発環境を変えるなんて効率悪くてやってられへん。

という事で、まぁエディタにEmacsを使っている事もあって、僕の開発環境はす〜っかり以下のものになっているわけです。

  • Emacs
  • gcc
  • gdb
  • make
  • subversion

これなら大抵の環境でソフト開発ができるからね。
で、今回はmakeのお話。

makeってめっちゃ便利なんやけど、意外と記述が面倒やったりします。
仕様の制限とかも大きいからなんやけど、それでもタイムスタンプをチェックしてコマンド実行を制御できるってのは非常に魅力的。個人的には好きなコマンドなんで、perlやらrubyやら使わんと大抵の事はmakeで済ましてしまったりしまする。

さて、makeでのターゲットの記述方法ですが(いきなりそこかい...)こんな感じ。

ターゲット名:
    コマンド 引数

コマンドの前は必ず[TAB]である必要があります。
通常makeではdefaultのターゲットとして、allを用意していたりするので

all:
    コンパイルコマンド

ってな感じで記述するわけですが、同じターゲット名を複数書く事はできないのです。例えば

clean:
    rm -f ファイル名

clean:
    rm -rf ディレクトリ名

とかはできない。実行時にターゲット名が重複しているってエラーになるのです。
大抵は問題ないのやけど、時々これが困った事になったりして。
まぁ、回避方法はいくらでもあるのやけど、こういう場合は取り合えずターゲット名の後ろのコロン((":")を二重にしちゃいましょう。そうすれば、先に記述されたコマンドから順次実行されまする。

clean::
    rm -f ファイル名

clean::
    rm -rf ディレクトリ名

上記のように記述すれば、ファイル削除の後にディレクトリ削除が実行されますダ

« 「怯む」の読み仮名 | トップページ | 【C/C++】 演算子のオーバーロード »

make」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 【make】 makeファイルでの多重ターゲット定義:

« 「怯む」の読み仮名 | トップページ | 【C/C++】 演算子のオーバーロード »