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

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

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

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

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

  • Emacs
  • gcc
  • gdb
  • make
  • subversion

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

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

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

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

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

all:
    コンパイルコマンド

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

clean:
    rm -f ファイル名

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

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

clean::
    rm -f ファイル名

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

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

Author: kan
初めてプログラムらしきものを作ったのは幼稚園の時。それから約40年経ち、現在はデジタル回路設計から信号処理、機械学習まで幅広い経験を活かしてシステムアーキテクトとして活動中。超並列処理、デジタル回路とソフトウェアのバランス設計が得意分野。 Linux/Mac/Windows使い。 C/C++を主要言語として、Unity、Qtなどのフレームワーク興味あり。UI/UXデザイン、STL拡張など。 音声処理、画像処理、技術コンサルは仕事でも請け負います。 一般ソフトウェア開発プロセス、医療機器ソフトウェア開発プロセス作成も進行中。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください