Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Makefile 入門

Avatar for SAW SAW
July 13, 2026

Makefile 入門

第56回関西PHP勉強会 の発表資料です。

Avatar for SAW

SAW

July 13, 2026

More Decks by SAW

Other Decks in Programming

Transcript

  1. $whoami 氏名: 加藤 宗一郎 (32歳) ハンドルネーム: SAW : (@azuki_eater) 関西の

    IT エンジニア コミュニティの賑やかし 大阪在住・愛知出身 得意分野: Web アプリケーション開発 Laravel, Vue 所属: 有限会社アリウープ マスカルポーネって響きがマスカットの品種名っぽくない? 2 本日の迷言
  2. ファイルの依存関係 あるファイル から ファイル を生成する時に は と依存関係にある : 依存ファイル 例:

    C のソースコード : ターゲット 例: C のソースコードからコンパイルされた実行ファイル ファイルの依存関係は多段の階層になることがある 例: のファイルの依存関係 diagram.dot diagram.eps paper.tex paper.dvi paper.pdf S T S T S T LT ​ X A E 7
  3. Makefile の基本構造 以下の要素で構成 生成対象のファイル (ターゲット) ターゲットを生成するために必要なファイル (依存ファイル) ターゲットと依存ファイル は :

    (コロン) で区切る ターゲットを生成するために実行が必要なコマンド群 実行するコマンドの前は タブ文字 でインデント main : main.c hello.o cc -o main main.c hello.o hello.o : hello.c cc -c hello.c 9
  4. make の基本的な動作 make を実行するとそのディレクトリの Makefile を読み込んで実行 指定がない場合は Makefile 内の先頭のターゲットを生成 ターゲットを指定する場合は

    make の引数に渡す ターゲットを生成するのに必要なコマンドのみ実行 ターゲットの生成に関係ないコマンドは実行されない 依存ファイルが更新されていない場合は実行されない 10
  5. ファイルの更新の判定方法 ターゲットと依存ファイルのファイルのタイムスタンプで判定 依存ファイルの方が新しい場合は更新されていると判定 ファイルの変更差分での判定ではない $ make hoge.o cc -c hoge.c

    -o hoge.o $ make hoge.o cc -c hoge.c -o hoge.o $ stat -f '%N %Sm' -t '%Y/%m/%d %H:%M:%S' hoge.{c,o} hoge.c 2026/07/12 13:18:34 hoge.o 2026/07/12 13:32:03 $ make hoge.o make: `hoge.o' is up to date. $ touch hoge.c $ stat -f '%N %Sm' -t '%Y/%m/%d %H:%M:%S' hoge.{c,o} hoge.c 2026/07/12 13:32:11 hoge.o 2026/07/12 13:32:03 $ 11
  6. 便利な機能 変数: 一般的なプログラミング言語の変数と同様 自動変数: ターゲットや依存ファイルなどを参照するための変数 $@ : ターゲットのファイル名 $< :

    依存ファイルの最初のファイル名 $^ : 依存ファイルのすべてのファイル パターンルール: 任意のファイルにルールを適用できる機能 % をワイルドカードとして %.o : %.c のようなルールを記述 Phony targets: make clean のように実行したい内容を指定する時に利用 .PHONY : clean のように指定 12
  7. 便利な機能を利用した Makefile の例 .PHONY : all clean all : main1

    main2 objects1 = hoge.o piyo.o objects2 = foo.o bar.o main1 : main1.c $(objects1) $(CC) -o $@ $^ # $(CC) は C コンパイラコマンドを表す組み込み変数 main2 : main2.c $(objects2) $(CC) -o $@ $^ %.o : %.c $(CC) -c $< -o $@ clean : rm *.o 13
  8. php-src の Makefile はどうなっている? php-src のリポジトリには Makefile が存在しない README を読むと

    make の前に実行しているコマンドがある ./buildconf : configure というシェルスクリプトを生成 ./configure : Makefile を生成 ./buildconf ./configure make -j4 15
  9. 宣伝 その2 Vue Fes Japan 2026 開催予定 日付: 2026/10/24 (土)

    開催場所: 大手町プレイス ホール&カンファレンス SAVE THE DAY! 20