Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Makefile 入門
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
SAW
July 13, 2026
Programming
130
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
110
Laravelで手軽にAPIドキュメントを生成する ― Scribe活用術
azuki
0
80
🪝 便利な Property Hooks を 使ってみよう 🪝
azuki
0
110
決済システム超初心者が Stripe に入門している話
azuki
0
180
React Hook Form と Zod によるフォームバリデーション
azuki
0
92
PHP で form-data を POST 以外のメソッドで受け取るには?
azuki
0
100
PHP で学ぶ OAuth 入門
azuki
2
1.5k
EditorConfig を使ってみよう
azuki
1
140
Symfony でサクッと作る REST API サーバー
azuki
1
300
Other Decks in Programming
See All in Programming
ActionController meets Protocol Buffers
sorah
0
670
気持ちぃ〜角丸 Squircle
ryu1013
0
320
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
270
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
350
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
510
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
34k
Kotlinの15年とServer-Side Kotlin
n_takehata
1
160
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
740
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
890
Verilogで学ぶCPU自作入門
uyuki234
8
4.2k
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
140
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.1k
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Leo the Paperboy
mayatellez
10
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
410
How to make the Groovebox
asonas
2
2.5k
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