ぱらぱらめくる『GNU make Version 3.77(日本語版)』

  • こちら
  • 目次
    • makeの概要
    • Makefile入門
    • Makefileの記述
    • ルールの記述
    • ルール行でのコマンドの記述
    • 変数の利用法
    • Makefileの条件分岐部分(割愛)
    • テキスト変形関数(割愛)
    • makeの実行方法
    • 暗黙のルールの利用
    • その他
  • でもこの大部のマニュアルの前に、『慣習的なMakefile』を読んであたりをつけるのもよい
  • makeの概要
    • makeコマンドはmakefileを読み込んで処理する。特にコンパイリングに多用される
  • Makefile入門
    • ターゲット、依存関係、コマンド、が書いてある
hogetarget : izon1 izon2 ...
        コマンド行
    • この2行相当の羅列
    • Makefileが「??」なのは、この原則を守りつつ、省略表記がたくさんあるから。そしてこの省略表記は、見た目は「??」だけれど、書き間違いを防ぐ仕組みでもある(ので覚えることになる)
  • Makefileの記述
    • 5つの要素
      • 明示ルール
      • 暗黙のルール
      • 変数定義
      • 指令(ディレクティブ)
      • コメント
    • Makefileのファイル名
      • makeコマンドは、GNUmakefile, makefile, Makefileの順で引数を試すから、この名前を使っておけば、引数の指定は不要
    • Makefileの階層構造
      • Makefileの中に他のMakefileを読ませることができ、結果として階層化する
      • さらに読み込み先Makefileの一部だけの活用を可能にするなどの書式もある
  • ルールの記述
    • ターゲットが何に依存していて、どういうコマンドで作るか
    • 依存関係を書いておくことで、依存物の変更があるときだけ、ターゲットを再作成するように教えることができる。再作成時に使うコマンドが必要なのは当然
    • ワイルドカードに2種類
    • 依存ファイルを探す
      • 依存ファイルがないと作れない。カレントディレクトリを探したり、特定の探索場所を探したりしてほしいので、それを制御する
      • VPATH,vpath
    • 特別なターゲット名があるので注意(.HOGEのように.始まりで大文字で定義されているいくつかのもの)
  • ルール行でのコマンドの記述
    • シェルコマンドの1行に相当する
    • make実行時に画面表示される。@で始める行は表示させない
  • 変数の利用法
    • makeでは変数をマクロと呼ぶ
    • 変数には、複数の要素を指定できる(それが一番の変数利用のメリットか…)
    • 使用例
RYOBJECTS = hoge.o hage.o hige.o
mytarget : $(RYOBJECTS)
       cc -o mytarget $(RYOBJECTS)
$(RYOBJECTS) : myheader.h
    • 変数定義には "=" と":="との二種類があり、使われ方に違いがある(がここでは割愛)
    • "define"という定義の仕方もある
  • makeの実行方法
    • 引数なしでmakefileを読ませるのが基本
    • ファイル指定は-f,-fileオプション
    • targetを指定しての実行も可能
    • makeコマンドのオプションリストがこのページにある
    • 大事なのは、-I dir オプション(インクルード対象のmakefileの検索に用いる) か…
  • 暗黙のルール(ここが大事)
    • あまりにいつも使う(コンパイルに)ので、そうするものだと決まっていることがある(こういうのが初心者への敷居を高くするのだが…)
    • 暗黙のルールのカタログ
    • 暗黙のルールのためには決まった変数名がある(その中にCFLAGSとかCXXFLAGSとかがある)
    • 自動変数というのもある
      • $@ $% $< $? $+ $* とか