SlideShare a Scribd company logo
GNU Make でも使ってみようか	
Y. Morikawa
Original contents are created at 2006-06-30
Published on Slideshare at 2016-02-17
このスライドについて	
¡  10年ぐらい前、学生時代に作った資料で、とある機会が
あって掘り返しました。
¡  改めて読むと、Makefile に馴染みがない人向けのイン
トロ資料としては多少役立つかなと思い、Slideshare
にアップしてみました。
¡  学生時代は Fortran (f90) を触る機会が多かったの
で、.f90 のコードをコンパイルする、みたいな例で紹介
してます。
発表の前に	
¡  結構細かい時が多いので前列でご拝聴下さい
¡  本日は一応, 「make って使ったことあるけど, ちょっと
難しそうで書くのは...」というmake初級者向けなつもり
です.
¡  make って聞いたこともない皆様
l  はじめからどんどん質問してね
¡  make 初級者の皆様
l  期待しないで質問してください.
¡  中・上級者のみなさま
l  コメントお待ちしてます.
目次	
¡  最低限 make
¡  make のすごいとこ
¡  現役 make さん見学
¡  make 応用編
¡  make 落ち穂拾い
最低限 make
Make って何??
¡  「メイク」と呼びます. (和訳: 作る)
¡  プログラムのコンパイル, リンク, インストール
作業を自動化してくれるツール
l  見たこと無いかな??
¡  上記作業の時間を劇的に短縮
⇒ ソフトウェア開発の大きな助けに
l  その他にもいろいろ応用できます (後述)
$ make
# make install
種類いろいろ	
¡  Make いろいろ
l  System V Make
¡  おそらく一番原始的な make. UNIX 上で動作.
l  mk, nmake, BSD Make, SunOS Make, SGI
Make, ...
l  GNU Make (gmake)
¡  GNU プロジェクトの一環として標準版 make を模倣
l  「あきれるほど徹底的に書き直された (Andrew 他,
1997)」らしい
¡  豊富な拡張機能
¡  GNU 系の OS だけでなく, UNIX, Windows, Mac 上
で使える.
¡  もちろん GNU ライセンス
¡  今回は GNU Make を念頭にお話します.
御託はいいから使ってみよう	
¡  作業の流れ
l  GNU make のコマンド名の確認
l  C や Fortran のソースコードを準備
l  Makefile を書いてみる
l  いざ, make 実行!!
御託はいいから使ってみよう	
¡  GNU make のコマンド名の確認
¡  もし make が GNU make で無いときは...
l  “gmake” を代わりに使ってみる
l  chkgmake.sh (自作スクリプト) を使って調べる.
$ make –v
GNU Make 3.80
Copyright (C) 2002 Free Software ...
This is free software; see the source ..
There is NO warranty; not even for ...
PARTICULAR PURPOSE.
make コマンドが
GNU make であ
ることを確認
main.f90
	
御託はいいから使ってみよう	
¡  Fortran のソースコードを準備
¡  ちなみに, 手動でコンパイルする場合は...
$ vi main.f90
program main
print *, "Hello, World!"
end program main
$ g95 main.f90 –o main
$ ./main
Hello, World!
御託はいいから使ってみよう	
¡  Makefile を書いてみる	
Makefile
	
$ vi Makefile
main:
g95 main.f90 -o main
御託はいいから使ってみよう	
¡  いざ, make 実行!!
$ make main
g95 main.f90 -o main
$ ls –l
-rw-r--r-- ... 2006-06-29 22:45 Makefile
-rwxr-xr-x ... 2006-06-29 22:51 main*
-rw-r--r-- ... 2006-06-29 22:32 main.f90
-rw-r--r-- ... 2006-06-29 22:51 main.o
$ ./main
Hello, World!
仕組みはどうなってるの??
$ make main
make コマンドの引数には
「ターゲット」を指定します.
Makefile
	
main:
g95 main.f90 -o main
青字の部分が
「ターゲット」	
$ g95 main.f90 –o main
このコマンドが
そのまま実行
“all” というターゲット	
¡  make に引数を付けない場合は...?
l  “all” というターゲットが「引数なし」に対応します.
$ make
make all と入力
したときと同じ	
Makefile
	
all: main
main:
g95 main.f90 -o main
$ g95 main.f90 –o main
まずターゲットの右にリスト
されるターゲットから実行
ここまで聞いての素朴な疑問??
¡  Make って便利でつか?? (゜Д゜ ;)
¡  ここまでは 「最低限 Make」
¡  ここからが Make のすごいとこ	
作業量	
•  fortranコマンド	
• Makefile 作成
• make コマンド	
?
make のすごいとこ
更新のチェック	
¡  ソースコードが実行ファイルやオブジェクトファイ
ルよりも新しい場合にコンパイル
¡  ターゲットに生成されるファイル名を指定し,
その後ろに依存するファイルを追記	
Makefile
	
all: main
main: main.f90
g95 main.f90 -o main
ターゲット (生成されるファイル
ファイル) と, このソースコード
ファイルのタイムスタンプを
チェック
更新のチェック	
¡  実際に試してみる	
$ make
g95 main.f90 -o main
$ ls –l
-rwxr-xr-x ... 2006-06-29 22:51 main*
-rw-r--r-- ... 2006-06-29 22:32 main.f90
$ make
make: `all' に対して行うべき事はありません。
	
ソースコードの方が
古い	
Make は何もしない
更新のチェック	
¡  ソースを更新	
$ touch main.f90
$ ls –l
-rwxr-xr-x ... 2006-06-29 22:51 main*
-rw-r--r-- ... 2006-06-29 23:23 main.f90
$ make
g95 main.f90 -o main
	
ソースコードの方が
新しい	
ちゃんと実行ファイル
を生成
更新のチェック	
¡  更新をチェックする利点は??
¡  無駄なコンパイルを行なわなくて済む
¡  コンパイルに時間がかかる場合には, 作業時間
(コンパイルの待ち時間) が大幅に短縮される
l  特に最適化に優れるコンパイラは一般に個々のファ
イルのコンパイルに時間がかかったりすることも.
依存関係のチェック	
¡  ファイル同士の依存関係をチェック
¡  以下のような場合を考えよう.
reidai.f90
	program reidai
:
external maxmin
call maxmin(a,b,c,x,y)
:
end program reidai
maxmin.f90
	subroutine maxmin(a,b,c,max,min)
integer,external :: min2
:
min = min2(b,c)
:
end subroutine maxmin min2.f90
	function min2(i,j) result(m)
:
end function min2
依存先を示す
依存関係のチェック	
¡  ターゲットに実行ファイル or オブジェクトファイ
ルを指定
¡  そのターゲットの右に, 依存するファイル (オブ
ジェクトファイル or ソースコード) を指定	
Makefile
	
all: reidai
reidai: min2.o maxmin.o reidai.f90
g95 reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: min2.o maxmin.f90
g95 –c maxmin.f90
min2.o: min2.f90
g95 –c min2.f90
依存関係のチェック	
¡  動作の仕組み	
Makefile
	
all: reidai
reidai: min2.o maxmin.o reidai.f90
g95 reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: min2.o maxmin.f90
g95 –c maxmin.f90
min2.o: min2.f90
g95 –c min2.f90
$ make
$ g95 –c min2.f90
	
min2.o と
min2.f90 のタ
イムスタンプを
チェック
依存関係のチェック	
¡  動作の仕組み	
Makefile
	
all: reidai
reidai: min2.o maxmin.o reidai.f90
g95 reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: min2.o maxmin.f90
g95 –c maxmin.f90
min2.o: min2.f90
g95 –c min2.f90
$ make
$ g95 –c min2.f90
$ g95 –c maxmin.f90
	
maxmin.o と
maxmin.f90
のタイムスタンプ
をチェック
依存関係のチェック	
¡  動作の仕組み	
Makefile
	
all: reidai
reidai: min2.o maxmin.o reidai.f90
g95 reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: min2.o maxmin.f90
g95 –c maxmin.f90
min2.o: min2.f90
g95 –c min2.f90
$ make
$ g95 –c min2.f90
$ g95 –c maxmin.f90
$ g95 reidai.f90 maxmin.o min2.o -o reidai
reidai と
reidai.f90 のタ
イムスタンプを
チェック
依存関係のチェック	
¡  依存関係の下層 (依存される側) のファイルが
更新された場合
l  上層のファイルは全て再コンパイル	
reidai.f90 maxmin.f90 min2.f90
更新	
$ make
reidai maxmin.o Min2.0
再生成	再生成	再生成
依存関係のチェック	
¡  依存関係の上層ファイルが更新された場合
l  上層のファイルのみ再コンパイル	
reidai.f90 maxmin.f90 min2.f90
更新	
$ make
reidai maxmin.o Min2.0
そのまま	そのまま	再生成
依存関係のチェック	
¡  依存関係をチェックする利点
¡  ファイルの更新に対して, 必要最低限のコンパ
イルを行なってくれる.
¡  ファイルの数が多い場合, コンパイルの待ち時
間が大幅に短縮される
l  プログラムが巨大になってくるとこの時間短縮はかな
り有効
変数 (マクロ)
¡  同じような表記が繰り返されると, 改変が面
倒...
Makefile
	
all: reidai
reidai: min2.o maxmin.o reidai.f90
g95 reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: min2.o maxmin.f90
g95 –c maxmin.f90
min2.o: min2.f90
g95 –c min2.f90
コンパイラを変更するには, 3 箇所全部を書きかえる必要あり.
(ターゲットの数が増えると手に負えない…)
変数 (マクロ)
¡  変数の利用によって管理が楽に	
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: min2.o maxmin.f90
$(FC) –c maxmin.f90
min2.o: min2.f90
$(FC) –c min2.f90
FC = g95 が代入される
自動変数	
¡  二度書くのは面倒じゃありません...?
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) reidai.f90 maxmin.o min2.o -o reidai
maxmin.o: maxmin.f90
$(FC) –c maxmin.f90
min2.o: min2.f90
$(FC) –c min2.f90
同じもの	
同じもの
自動変数	
¡  主な「自動変数」
l  $@
¡  ルールのターゲットのファイル名。
l  $<
¡  最初の依存関係 (ターゲットの右に書かれるファイル名)
の名前。
l  $^, $+
¡  全ての依存関係の名前のそれぞれの間にスペースを挟
んで並べたもの。 ($+ はちょっと機能が異なる. 詳しく
は GNU Make リファレンスマニュアル参照)
自動変数	
¡  自動変数を使うと...?
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) $^ -o $@
maxmin.o: maxmin.f90
$(FC) –c $<
min2.o: min2.f90
$(FC) –c $<
min2.o maxmin.o reidai.f90
が代入される	
reidai
が代入される	
maxmin.f90
が代入される
自動変数	
¡  自動変数のメリット
¡  同じファイル名を2度書きせずに済む
¡  Makefile をすっきり書くことが出来る
¡  次に紹介する「サフィックスルール」との合わせ
技ですばらしいことに
サフィックスルール	
¡  まだ「似たようなもの」がありませんか?
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) $^ -o $@
maxmin.o: maxmin.f90
$(FC) –c $<
min2.o: min2.f90
$(FC) –c $<
***.f90 から ***.o
を生成するコマンド,
一緒ですね?
サフィックスルール	
¡  「サフィックスルール」を使ってみます
l  サフィックス(suffix) = 接尾辞 ≒ 拡張子名	
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) $^ -o $@
maxmin.o: maxmin.f90
min2.o: min2.f90
%.o: %.f90
$(FC) –c $<
***.f90 から ***.o
を生成する際の一般的
なルール	
(1) 一つ一つの依存関係に
ルールを書く必要が無くなる
サフィックスルール	
¡  「サフィックスルール」を使ってみます
l  サフィックス(suffix) = 接尾辞 ≒ 拡張子名	
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) $^ -o $@
maxmin.o:
min2.o:
%.o: %.f90
$(FC) –c $<
***.f90 から ***.o
を生成する際の一般的
なルール	
(2) ***.f90 を書かなくても
サフィックスルールから
自動的に補完
サフィックスルール	
¡  「サフィックスルール」を使ってみます
l  サフィックス(suffix) = 接尾辞 ≒ 拡張子名	
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o reidai.f90
$(FC) $^ -o $@
%.o: %.f90
$(FC) –c $<
***.f90 から ***.o
を生成する際の一般的
なルール	
(3) なので個々のターゲットを
作る必要すらない	
(4) ここに書いてあるだけで自動的に
***.f90 から ***.o を生成する.
サフィックスルール	
¡  [例題] “reidai” (実行ファイル) 用のサフィック
スルールも作ってみましょう	
Makefile
	
FC = g95
all: reidai
reidai: min2.o maxmin.o
%.o: %.f90
$(FC) –c $<
%: %.o
$(FC) $^ -o $@
依存関係を書くだけ	
実際にコンパイルを行なう
コマンドはサフィックス
ルールにお任せ
実践 Makefile
Makefile
	
FC = g95 # Fortran コンパイラ
FFLAGS = -O -I/usr/include
# コンパイル用のフラグ (オプションなど)
LDFLAGS = -L/usr/lib -lnetcdf-g95
# リンク用のフラグ (ライブラリなど)
all: reidai
reidai: min2.o maxmin.o
%.o: %.f90
$(FC) –c $(FFLAGS) $<
%: %.o
$(FC) $(FFLAGS) $^ $(LDLAGS) -o $@
Make のすごいとこ, まとめ	
¡  更新のチェック
¡  依存関係のチェック
¡  変数 (マクロ)
¡  サフィックスルール
¡  これだけ覚えとけばとりあえず OK !!
l  たぶんね... ( ̄▽ ̄;)
現役 make さん見学
Make の仕事を見てみよう	
¡  Apache で働く make を見てみる
l  (まずは準備)
$ cd /usr/local/src
$ wget http://www.apache.jp/dist/
httpd/apache_1.3.36.tar.gz
$ tar xvfz apache_1.3.36.tar.gz
$ cd apache_1.3.36
$ ./configure
ソースコード
置き場へ移
動	
Apache の tar
ボールをダウン
ロード
Make の仕事を見てみよう	
¡  Apache で働く make を見てみる
l  (まずは準備)
$ cd /usr/local/src
$ wget http://www.apache.jp/dist/
httpd/apache_1.3.36.tar.gz
$ tar xvfz apache_1.3.36.tar.gz
$ cd apache_1.3.36
$ ./configure
Tar ボール
を展開	
コンパイルを行なう環
境が どのようなもの
であるかを調査
Make の仕事を見てみよう	
¡  make によるコンパイル	
$ make
===> src/main
make[1]: Entering directory `/usr/local/src/
apache_1.3.34/src/main'
gcc -c -I../os/unix -I../include
-DLINUX=22 ... http_config.c
:
ar cr libmain.a .. http_config.o http_core.o ..
make[1]: Leaving directory `/usr/local/src/
apache_1.3.34'
<=== src
Make 実行	
src/main ディ
レクトリへ移
動
Make の仕事を見てみよう	
¡  make によるコンパイル	
$ make
===> src/main
make[1]: Entering directory `/usr/local/src/
apache_1.3.34/src/main'
gcc -c -I../os/unix -I../include
-DLINUX=22 ... http_config.c
:
ar cr libmain.a .. http_config.o http_core.o ..
make[1]: Leaving directory `/usr/local/src/
apache_1.3.34'
<=== src
C コンパイラ gcc によって
http_config.c をコンパイル	
仕事を終えてもと
のディレクトリへ戻
る
アーカイブコマンド ar によって
ライブラリ libmain.a を作成
Make の仕事を見てみよう	
¡  make によるインストール	
$ make install
make[1]: Entering directory ...
===> [mktree: Creating Apache installation tree]
./src/helpers/mkdir.sh /usr/local/apache/bin
mkdir /usr/local/apache/bin
:
===> [programs: Installing Apache httpd program..]
./src/helpers/install.sh -c -m 755 -s ./src/httpd
/usr/local/apache/bin/httpd
:
===> [config: Installing Apache config files]
./src/helpers/install.sh -c -m 644 conf/httpd.conf
/usr/local/apache/conf/httpd.conf
:
make[1]: Leaving directory ...
Make 実行	
ディレクトリツ
リーの作成
Make の仕事を見てみよう	
¡  make によるインストール	
$ make install
make[1]: Entering directory ...
===> [mktree: Creating Apache installation tree]
./src/helpers/mkdir.sh /usr/local/apache/bin
mkdir /usr/local/apache/bin
:
===> [programs: Installing Apache httpd program..]
./src/helpers/install.sh -c -m 755 -s ./src/httpd
/usr/local/apache/bin/httpd
:
===> [config: Installing Apache config files]
./src/helpers/install.sh -c -m 644 conf/httpd.conf
/usr/local/apache/conf/httpd.conf
:
make[1]: Leaving directory ...
Apache の実行プログラム
httpd のインストール	
仕事を終えてもと
のディレクトリへ戻
る
設定ファイル httpd.conf のイ
ンストール
Make の仕事を見てみよう	
¡  おさらい (Apache の場合)
l  make によって…
¡  ソースコード ****.c をコンパイル
¡  ライブラリ lib*****.a の生成
¡  実行コマンド (例: httpd) の生成
l  make install によって…
¡  インストール先のディレクトリツリーの作成
¡  ライブラリや実行コマンドをインストール
l  実際には単にコピーしてパーミッションの設定をするだけ
¡  大抵の make は上記のような働きをします
make 応用編
ronbun.tex から ronbun.dvi を経て
ronbun.pdf を生成	
いろいろ応用 (1)
¡  TeX から DVI, PDF へ	
Makefile
	PTEX = platex # LaTeX コマンド
DVIPDF = dvipdfmx # DVI -> PDF コンバータ
all: ronbun.pdf
%.dvi: %.tex
$(PTEX) $<
$(PTEX) $<
%.pdf: %.dvi
$(DVIPDF) $<
zagaku.rd から zagaku.htm を生成	
いろいろ応用 (2)
¡  RD から HTML
Makefile
	
RD = rd2 # rdtool
RDFLAGS = -r rd/rd2html-lib --with-css=$(CSS)
# オプション
CSS = zagaku.css # スタイルシート
all: zagaku.htm
%.htm: %.rd
$(RD) $(RDFLAGS) $< > $@
http://www.gfd-dennou.org/library/dcmodel/doc/sample_Makefile/Makefile.rd2html
にもう少し凝った Makefile 置いてあります.
make 落ち穂拾い
よくある「ターゲット」	
¡  all
l  プログラムを完全にコンパイルする.
¡  install
l  コンパイルされたライブラリなどのシステムにインストールする
¡  clean
l  コンパイルされたオブジェクトファイルや, 実行ファイルをカレン
トディレクトリから削除
¡  check
l  作成されたライブラリの動作チェックなど
コマンドエコー	
¡  makeは実行するコマンドを画面に表示する. こ
の機能の事をエコー(echoing=反響)と呼ぶ.
l  `@‘ではじまる行はエコーしない.
Makefile
	
all:
echo hogehoge
echo hogehoge
hogehoge
コマンドエコー	
¡  makeは実行するコマンドを画面に表示する. こ
の機能の事をエコー(echoing=反響)と呼ぶ.
l  `@‘ではじまる行はエコーしない.
Makefile
	
all:
@echo hogehoge
hogehoge
コマンド内エラー	
¡  makeは実行したコマンドからエラーが返るとそ
の後の処理を残したまま終了する
l  `-‘ではじまる行はエラーが返っても続く	
Makefile
	
rm hogehoge.txt
rm: cannot remove `hogehoge.txt‘: そのようなファイル
やディレクトリはありません
make: *** [all] エラー 1
	
all:
rm hogehoge.txt
rm foo.txt
コマンド内エラー	
¡  makeは実行したコマンドからエラーが返るとそ
の後の処理を残したまま終了する
l  `-‘ではじまる行はエラーが返っても続く	
Makefile
	
rm hogehoge.txt
rm: cannot remove `hogehoge.txt': そのようなファイルや...
make: [all] エラー 1 (無視されました)
rm foo.txt
rm: cannot remove `foo.txt': そのようなファイルやディレクト...
make: [all] エラー 1 (無視されました)
all:
-rm hogehoge.txt
-rm foo.txt
関数だってありますよ	
¡  $(関数 引数) みたいに使う.
¡  $(subst from,to,text)
l  textという文章の本文の置換動作をしてくれます。つ
まり文章中にある全部のfromをtoに置換します。
¡  $(dir names...)
l  namesの中のそれぞれのファイル名のディレクトリ
部分を抽出します。
¡  とかとか... (詳しくは GNU Make マニュアル
「テキスト変形関数」参照のこと)
シェルスクリプト	
¡  基本的に sh (Bourne Shell) が書けます.
Makefile
	FC = g95 # Fortran コンパイラ
FFLAGS = -O -I/usr/include
LDFLAGS = -L/usr/lib -lnetcdf-g95
all: reidai
reidai: min2.o maxmin.o
if [ -f $@ ] ; then 
chmod g+w $@ ;
fi
%.o: %.f90
$(FC) –c $(FFLAGS) $<
%: %.o
$(FC) $(FFLAGS) $^ $(LDLAGS) -o $@
IF 文を書くとき FI までの
部分の行末に “” を付
けるよう注意
おわりに	
¡  Make って...
l  ソフトウェア開発, 特にコンパイラ言語を用いている
場合, コンパイル作業を助けてくれる大変便利な
ツール
l  少しだけ覚えることあるけど, その絶大な効果に比
べれば大したことない (と思う)
l  他にも ファイルA ⇒ ファイルB を生成する場合には
応用が利く
¡  結論
l  始めは簡単なもので良いので, 是非 Make に触っ
てみよう!!
参考資料	
¡  GNU Make マニュアル (日本語訳)
l  http://www.ecoop.net/coop/translated/
GNUMake3.77/
¡  Andrew Oram, Steve Talbott 著, 矢吹 道
朗 監訳, 菊池 彰 訳, 1997: make 改訂版.
オライリージャパン, 150pp.
¡  “mk” に関して
l  http://plan9.aichi-u.ac.jp/mk/
¡  Windows 上で動作する GNU make を同梱
するソフトウェア MinGW
l  http://www.mingw.org/

More Related Content

What's hot

PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
Yahoo!デベロッパーネットワーク
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
Rui Hirokawa
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
 
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡXPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
Masahiko Miyo
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
Rui Hirokawa
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO について
Tomoya Kawanishi
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
do_aki
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Masahito Zembutsu
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
Shohei Okada
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
fukuoka.ex
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
Kazuya Wada
 
超簡単! MySQLをWindowsにインストール
超簡単! MySQLをWindowsにインストール超簡単! MySQLをWindowsにインストール
超簡単! MySQLをWindowsにインストール
Shin Tanigawa
 
超簡単!SubversionとTortoiseSVN入門(操作編1)
超簡単!SubversionとTortoiseSVN入門(操作編1)超簡単!SubversionとTortoiseSVN入門(操作編1)
超簡単!SubversionとTortoiseSVN入門(操作編1)
Shin Tanigawa
 
Laravel4 Happy Hacking
Laravel4 Happy HackingLaravel4 Happy Hacking
Laravel4 Happy Hacking
Takashi Ohida
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
y-uti
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 

What's hot (20)

PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡXPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO について
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 
超簡単! MySQLをWindowsにインストール
超簡単! MySQLをWindowsにインストール超簡単! MySQLをWindowsにインストール
超簡単! MySQLをWindowsにインストール
 
1MB
1MB1MB
1MB
 
超簡単!SubversionとTortoiseSVN入門(操作編1)
超簡単!SubversionとTortoiseSVN入門(操作編1)超簡単!SubversionとTortoiseSVN入門(操作編1)
超簡単!SubversionとTortoiseSVN入門(操作編1)
 
Laravel4 Happy Hacking
Laravel4 Happy HackingLaravel4 Happy Hacking
Laravel4 Happy Hacking
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 

Viewers also liked

Christine Vo
Christine VoChristine Vo
Christine Vo
STEM2
 
Research Paper
Research Paper Research Paper
Research Paper
Erna Gjiriti
 
Changing_Minds_Company_Profile
Changing_Minds_Company_ProfileChanging_Minds_Company_Profile
Changing_Minds_Company_Profile
Kerry Craig
 
Ian Gollop CV
Ian Gollop CVIan Gollop CV
Ian Gollop CV
Ian Gollop
 
Семиотические системы и нарратив в художественном произведении
 Семиотические системы и нарратив в художественном произведении Семиотические системы и нарратив в художественном произведении
Семиотические системы и нарратив в художественном произведении
Anna Degteva
 
Louis XV Floorplan
Louis XV FloorplanLouis XV Floorplan
Louis XV FloorplanDana Dake
 
70s fashion history
70s fashion history70s fashion history
70s fashion historyshimin fei
 
FCL_Credentials_Portfolio
FCL_Credentials_PortfolioFCL_Credentials_Portfolio
FCL_Credentials_Portfolio
Gillian Harding-Moore
 
Engineering fair project
Engineering fair projectEngineering fair project
Engineering fair project
STEM2
 
сертификаты соответствия 2015
сертификаты соответствия 2015сертификаты соответствия 2015
сертификаты соответствия 2015
iSinkov
 
Fair Participation: Bulgaria
Fair Participation: BulgariaFair Participation: Bulgaria
Fair Participation: Bulgaria
Edmund Siah-Armah
 
RESUME__SUMER SAILI
RESUME__SUMER SAILIRESUME__SUMER SAILI
RESUME__SUMER SAILI
Sumer Saili
 
高田研冬合宿(竹内昌憲)
高田研冬合宿(竹内昌憲)高田研冬合宿(竹内昌憲)
高田研冬合宿(竹内昌憲)
昌憲 竹内
 
Quick add
Quick addQuick add
Quick add
STEM2
 
Our project
Our projectOur project
Our project
STEM2
 
Presentation1
Presentation1Presentation1
Presentation1
Shashank Garg
 
PORTFOLIO FINAL car design
PORTFOLIO FINAL car design PORTFOLIO FINAL car design
PORTFOLIO FINAL car design
Awais Arshad
 
Felix, Steven
Felix, StevenFelix, Steven
Felix, Steven
Steven Felix
 
Folklore espitual
Folklore espitualFolklore espitual
Folklore espitual
Jessica Revelo Burbano
 
Elementos y compuestos en la vida cotidiana
Elementos y compuestos en la vida cotidianaElementos y compuestos en la vida cotidiana
Elementos y compuestos en la vida cotidiana
sara vazquez carrion
 

Viewers also liked (20)

Christine Vo
Christine VoChristine Vo
Christine Vo
 
Research Paper
Research Paper Research Paper
Research Paper
 
Changing_Minds_Company_Profile
Changing_Minds_Company_ProfileChanging_Minds_Company_Profile
Changing_Minds_Company_Profile
 
Ian Gollop CV
Ian Gollop CVIan Gollop CV
Ian Gollop CV
 
Семиотические системы и нарратив в художественном произведении
 Семиотические системы и нарратив в художественном произведении Семиотические системы и нарратив в художественном произведении
Семиотические системы и нарратив в художественном произведении
 
Louis XV Floorplan
Louis XV FloorplanLouis XV Floorplan
Louis XV Floorplan
 
70s fashion history
70s fashion history70s fashion history
70s fashion history
 
FCL_Credentials_Portfolio
FCL_Credentials_PortfolioFCL_Credentials_Portfolio
FCL_Credentials_Portfolio
 
Engineering fair project
Engineering fair projectEngineering fair project
Engineering fair project
 
сертификаты соответствия 2015
сертификаты соответствия 2015сертификаты соответствия 2015
сертификаты соответствия 2015
 
Fair Participation: Bulgaria
Fair Participation: BulgariaFair Participation: Bulgaria
Fair Participation: Bulgaria
 
RESUME__SUMER SAILI
RESUME__SUMER SAILIRESUME__SUMER SAILI
RESUME__SUMER SAILI
 
高田研冬合宿(竹内昌憲)
高田研冬合宿(竹内昌憲)高田研冬合宿(竹内昌憲)
高田研冬合宿(竹内昌憲)
 
Quick add
Quick addQuick add
Quick add
 
Our project
Our projectOur project
Our project
 
Presentation1
Presentation1Presentation1
Presentation1
 
PORTFOLIO FINAL car design
PORTFOLIO FINAL car design PORTFOLIO FINAL car design
PORTFOLIO FINAL car design
 
Felix, Steven
Felix, StevenFelix, Steven
Felix, Steven
 
Folklore espitual
Folklore espitualFolklore espitual
Folklore espitual
 
Elementos y compuestos en la vida cotidiana
Elementos y compuestos en la vida cotidianaElementos y compuestos en la vida cotidiana
Elementos y compuestos en la vida cotidiana
 

Similar to GNU Make でも使ってみようか

いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理博文 斉藤
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
dynamis
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Installphillippro
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Install
phillippro
 
cosmomc install
cosmomc installcosmomc install
cosmomc installphillippro
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
晃 遠山
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
bsdhack
 
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそHiromu Shioya
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日nukaemon
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
Toru Tamaki
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
OSSラボ株式会社
 

Similar to GNU Make でも使ってみようか (20)

いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
BBBBB
BBBBBBBBBB
BBBBB
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Install
 
Cosmomc
CosmomcCosmomc
Cosmomc
 
Cosmomc Install
Cosmomc InstallCosmomc Install
Cosmomc Install
 
cosmomc install
cosmomc installcosmomc install
cosmomc install
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ20090415 すばらしきSymfonyの世界へようこそ
20090415 すばらしきSymfonyの世界へようこそ
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 

Recently uploaded

Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 

Recently uploaded (7)

Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 

GNU Make でも使ってみようか