Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Makefile 入門
Search
SAW
July 13, 2026
Programming
79
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Makefile 入門
第56回関西PHP勉強会 の発表資料です。
SAW
July 13, 2026
More Decks by SAW
See All by SAW
Effortless API Documentation with Scribe
azuki
0
77
Laravelで手軽にAPIドキュメントを生成する ― Scribe活用術
azuki
0
52
🪝 便利な Property Hooks を 使ってみよう 🪝
azuki
0
89
決済システム超初心者が Stripe に入門している話
azuki
0
130
React Hook Form と Zod によるフォームバリデーション
azuki
0
76
PHP で form-data を POST 以外のメソッドで受け取るには?
azuki
0
88
PHP で学ぶ OAuth 入門
azuki
2
1.4k
EditorConfig を使ってみよう
azuki
1
130
Symfony でサクッと作る REST API サーバー
azuki
1
270
Other Decks in Programming
See All in Programming
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
200
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
160
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
460
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
2
310
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
200
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
0
1k
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
290
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
160
FDEが実現するAI駆動経営の現在地
gonta
2
240
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.3k
数百円から始めるRuby電子工作
tarosay
0
120
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Un-Boring Meetings
codingconduct
0
360
Amusing Abliteration
ianozsvald
1
240
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
RailsConf 2023
tenderlove
30
1.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Visualization
eitanlees
152
17k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
A designer walks into a library…
pauljervisheath
211
24k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Transcript
Makefile 入門 第56回関西PHP勉強会 2026/07/13 SAW
$whoami 氏名: 加藤 宗一郎 (32歳) ハンドルネーム: SAW : (@azuki_eater) 関西の
IT エンジニア コミュニティの賑やかし 大阪在住・愛知出身 得意分野: Web アプリケーション開発 Laravel, Vue 所属: 有限会社アリウープ マスカルポーネって響きがマスカットの品種名っぽくない? 2 本日の迷言
前提条件・免責事項 GNU make を対象とします BSD make との互換性は考慮しません UNIX/Linux 系のシステムを想定します Windows
(WSL を除く) は対象外とします 3
このトークの動機 とある懇親会で Makefile の使い方が意外と盛り上がった 自分が過去に少しだけ使ってた make の経験が共有できそう 大学の卒論の のコンパイルに利用 (約
10 年前) PHP もソースからビルドするのに Makefile を利用 Makefile の基礎を知るきっかけになってほしい LT X A E 4
Makefile とは make を実行する際に読み込まれるファイル make : ファイルの生成に必要なコマンドを自動的に判定して実行するツール ファイルの依存関係に基づいて実行するコマンドを決定 Makefile にはファイルの依存関係と実行するコマンドを記述
C で書かれたプログラムをビルドする際に利用されることが多い C のプログラム以外のビルドにも利用可能 例: のコンパイル LT X A E 5
Makefile の実用例 ソースコードのビルドやインストール PHP GNU Coreutils FreeBSD Ports 6
ファイルの依存関係 あるファイル から ファイル を生成する時に は と依存関係にある : 依存ファイル 例:
C のソースコード : ターゲット 例: C のソースコードからコンパイルされた実行ファイル ファイルの依存関係は多段の階層になることがある 例: のファイルの依存関係 diagram.dot diagram.eps paper.tex paper.dvi paper.pdf S T S T S T LT X A E 7
お好み焼きで考える依存関係 生地を焼く 小麦粉・卵・水・千切りキャベツを混ぜる キャベツを千切りにする 8
Makefile の基本構造 以下の要素で構成 生成対象のファイル (ターゲット) ターゲットを生成するために必要なファイル (依存ファイル) ターゲットと依存ファイル は :
(コロン) で区切る ターゲットを生成するために実行が必要なコマンド群 実行するコマンドの前は タブ文字 でインデント main : main.c hello.o cc -o main main.c hello.o hello.o : hello.c cc -c hello.c 9
make の基本的な動作 make を実行するとそのディレクトリの Makefile を読み込んで実行 指定がない場合は Makefile 内の先頭のターゲットを生成 ターゲットを指定する場合は
make の引数に渡す ターゲットを生成するのに必要なコマンドのみ実行 ターゲットの生成に関係ないコマンドは実行されない 依存ファイルが更新されていない場合は実行されない 10
ファイルの更新の判定方法 ターゲットと依存ファイルのファイルのタイムスタンプで判定 依存ファイルの方が新しい場合は更新されていると判定 ファイルの変更差分での判定ではない $ 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
便利な機能 変数: 一般的なプログラミング言語の変数と同様 自動変数: ターゲットや依存ファイルなどを参照するための変数 $@ : ターゲットのファイル名 $< :
依存ファイルの最初のファイル名 $^ : 依存ファイルのすべてのファイル パターンルール: 任意のファイルにルールを適用できる機能 % をワイルドカードとして %.o : %.c のようなルールを記述 Phony targets: make clean のように実行したい内容を指定する時に利用 .PHONY : clean のように指定 12
便利な機能を利用した 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
発展編 14
php-src の Makefile はどうなっている? php-src のリポジトリには Makefile が存在しない README を読むと
make の前に実行しているコマンドがある ./buildconf : configure というシェルスクリプトを生成 ./configure : Makefile を生成 ./buildconf ./configure make -j4 15
buildconf と configure の正体 実行する環境に合わせた Makefile を自動的に生成するためのスクリプト OS やコンパイラなどの差異を吸収 中身は
shell script Autotools と呼ばれるツール群によってスクリプトや Makefile を自動生成 16
まとめ Makefile の基礎を説明 実行される内容とファイルの依存関係 Makefile の基本的な書き方 大規模プロジェクトで Makefile を生成する方法を説明 17
ご清聴ありがとうございました
宣伝 その1 フロントエンドカンファレンス関西 2026 開催予定 日付: 2026/10/12 (月・祝) 開催場所: コングレスクエア
グラングリーン大阪 SAVE THE DAY! 19
宣伝 その2 Vue Fes Japan 2026 開催予定 日付: 2026/10/24 (土)
開催場所: 大手町プレイス ホール&カンファレンス SAVE THE DAY! 20