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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
120
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
テーブルをDELETEした
yuzneri
0
130
yield再入門 #phpcon
o0h
PRO
0
850
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
130
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
0
180
Android CLI
fornewid
0
200
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
710
AIエージェントで 変わるAndroid開発環境
takahirom
2
750
What's New in Android 2026
veronikapj
0
240
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
210
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
3
1.4k
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.4k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
440
Claude Code のすすめ
schroneko
67
230k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
200
Deep Space Network (abreviated)
tonyrice
0
240
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
500
Building an army of robots
kneath
306
46k
Automating Front-end Workflow
addyosmani
1370
210k
Un-Boring Meetings
codingconduct
0
350
Why Our Code Smells
bkeepers
PRO
340
58k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
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