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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
SAW
July 13, 2026
Programming
38
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
76
Laravelで手軽にAPIドキュメントを生成する ― Scribe活用術
azuki
0
47
🪝 便利な Property Hooks を 使ってみよう 🪝
azuki
0
85
決済システム超初心者が Stripe に入門している話
azuki
0
120
React Hook Form と Zod によるフォームバリデーション
azuki
0
75
PHP で form-data を POST 以外のメソッドで受け取るには?
azuki
0
86
PHP で学ぶ OAuth 入門
azuki
2
1.4k
EditorConfig を使ってみよう
azuki
1
120
Symfony でサクッと作る REST API サーバー
azuki
1
270
Other Decks in Programming
See All in Programming
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
0
430
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.9k
スマートグラスで並列バイブコーディング
hyshu
0
280
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.8k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
dRuby over BLE
makicamel
2
410
Vite+ Unified Toolchain for the Web
naokihaba
0
700
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
830
Creating Composable Callables in Contemporary C++
rollbear
0
190
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
300
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Testing 201, or: Great Expectations
jmmastey
46
8.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
330
How to train your dragon (web standard)
notwaldorf
97
6.7k
The browser strikes back
jonoalderson
0
1.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Visualization
eitanlees
152
17k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
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