狠狠撸

狠狠撸Share a Scribd company logo
Makefile書けない人がMake4.0触ってみた

Lisp Meet Up #11
κeen(@blackenedgold)
2013年10月8日
GNU Make 4.0
リリース
目玉機能
組み込みGuile
サポート
Makeとは
?

まあ、知ってますよねー

?

依存関係を解消しながらタスクを実行する

?

POSIX標準(つまりGNU製以外もある)

?

Makefileを読んで実行する
Makefileの基本

変数定義
var = val
など(他にもある)
変数呼出し
$(var)
関数呼出し
$(func arg1, arg2, ...)
ターゲット定義
target: dep1 dep2 ....
body1
body2
.
.
Targetについてもう少し
●

targetと同じ名前のファイルと関連付けられる

●

depsは他のtarget

●

ファイルと関連付けたくなかったら組み込み
ターゲット .PHONYを使う
例)
.PHONY: clean
clean:
rm *.o
Guileについて
●

GNU 汎用途知的拡張言語

●

R5RS全部とR6RSの一部を実装したScheme処理系

●

GNU公式の拡張用組み込み言語

●

でもGNUですらあまり使ってない

●

一応JavaScript, Emacs Lisp, LuaからGuileにコンパイルでき
たりする
MakeからGuileを使ってみる
?インストール?
curl ftp://ftp.gnu.org/gnu/guile/guile-2.0.9.tar.gz | tar xzf cd guile-2.0.9
./configure
make
sudo make install
curl ftp://ftp.gnu.org/gnu/make/make-4.0.tar.gz | tar xzf cd make-4.0
./configure –with-guile
make
sudo make install

インストールが上手く行くとmakeの.FEATURES変数にguile
が入る
<demo0>
MakeからGuileを使ってみる
?基本?
基本、$(guile sexp)だけ。
●
sexpの返値を文字列に変換したものが$
(guile)の返値になる
●

<demo1>
MakeからGuileを使ってみる
?もうちょっと?

<demo2>
GuileからMakeを使ってみる
●

$(guile (load “file.scm”))でSchemeのファイルを読める

●

schemeからは(gmk-eval sexp)と(gmk-expand sexp)が使える
–

gmk-expand … 例の変換規則に従ってsexpを文字列に変換する

–

gmk-eval … sexpを文字列に変換しつつそのままMakefileの文として実行する

<demo3>
まとめ
●

MakeからGuileが呼べる

●

GuileからMakeが呼べる

●

可能性は色々ある

●

でも恐らく個人用途
おわり

More Related Content

What's hot (9)

リーダブルコードが良书だったのでまとめました
リーダブルコードが良书だったのでまとめましたリーダブルコードが良书だったのでまとめました
リーダブルコードが良书だったのでまとめました
Takumi Sato
?
Mongo db勉強会
Mongo db勉強会Mongo db勉強会
Mongo db勉強会
otmb
?
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
Masayuki Nii
?
颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い
颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い
颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い
Gou Sawada
?
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
?
ネットワーク第3回目
ネットワーク第3回目ネットワーク第3回目
ネットワーク第3回目
Yukiko Kato
?
俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか
俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか
俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか
ShunsukeNakamura17
?
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)
seichi23
?
リーダブルコードが良书だったのでまとめました
リーダブルコードが良书だったのでまとめましたリーダブルコードが良书だったのでまとめました
リーダブルコードが良书だったのでまとめました
Takumi Sato
?
Mongo db勉強会
Mongo db勉強会Mongo db勉強会
Mongo db勉強会
otmb
?
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
Masayuki Nii
?
颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い
颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い
颁プログラムを异なるマイコンで动作させる际のエンディアンとビットフィールドの取り扱い
Gou Sawada
?
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
?
ネットワーク第3回目
ネットワーク第3回目ネットワーク第3回目
ネットワーク第3回目
Yukiko Kato
?
俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか
俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか
俺の let p = PathBuf::from("/test").into_os_string().to_str();はなせ?コンハ?イルエラーか
ShunsukeNakamura17
?
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)
seichi23
?

Viewers also liked (20)

Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
?
颁尝21で色々なデータ构造を実装してみようとした
颁尝21で色々なデータ构造を実装してみようとした颁尝21で色々なデータ构造を実装してみようとした
颁尝21で色々なデータ构造を実装してみようとした
blackenedgold
?
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
Kazuhiro Hishinuma
?
(诲别蹿颈苍别)なしで再帰関数を定义する
(诲别蹿颈苍别)なしで再帰関数を定义する(诲别蹿颈苍别)なしで再帰関数を定义する
(诲别蹿颈苍别)なしで再帰関数を定义する
blackenedgold
?
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろう
blackenedgold
?
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parser
fukamachi
?
计算数学
计算数学计算数学
计算数学
blackenedgold
?
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
?
Camomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlCamomile : A Unicode library for OCaml
Camomile : A Unicode library for OCaml
Yamagata Yoriyuki
?
Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...
Anil Madhavapeddy
?
Ocaml
OcamlOcaml
Ocaml
Jackson dos Santos Olveira
?
A taste of Functional Programming
A taste of Functional ProgrammingA taste of Functional Programming
A taste of Functional Programming
Jordan Open Source Association
?
Haskell - Functional Programming
Haskell - Functional ProgrammingHaskell - Functional Programming
Haskell - Functional Programming
Giovane Berny Possebon
?
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
pramode_ce
?
Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)
Anil Madhavapeddy
?
An Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellAn Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using Haskell
Michel Rijnders
?
Introduction to haskell
Introduction to haskellIntroduction to haskell
Introduction to haskell
Luca Molteni
?
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
Hiroki Mizuno
?
OCaml Labs introduction at OCaml Consortium 2012
OCaml Labs introduction at OCaml Consortium 2012OCaml Labs introduction at OCaml Consortium 2012
OCaml Labs introduction at OCaml Consortium 2012
Anil Madhavapeddy
?
Os Peytonjones
Os PeytonjonesOs Peytonjones
Os Peytonjones
oscon2007
?
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
?
颁尝21で色々なデータ构造を実装してみようとした
颁尝21で色々なデータ构造を実装してみようとした颁尝21で色々なデータ构造を実装してみようとした
颁尝21で色々なデータ构造を実装してみようとした
blackenedgold
?
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
Kazuhiro Hishinuma
?
(诲别蹿颈苍别)なしで再帰関数を定义する
(诲别蹿颈苍别)なしで再帰関数を定义する(诲别蹿颈苍别)なしで再帰関数を定义する
(诲别蹿颈苍别)なしで再帰関数を定义する
blackenedgold
?
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろう
blackenedgold
?
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parser
fukamachi
?
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
?
Camomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlCamomile : A Unicode library for OCaml
Camomile : A Unicode library for OCaml
Yamagata Yoriyuki
?
Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...Using functional programming within an industrial product group: perspectives...
Using functional programming within an industrial product group: perspectives...
Anil Madhavapeddy
?
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
pramode_ce
?
Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)Mirage: ML kernels in the cloud (ML Workshop 2010)
Mirage: ML kernels in the cloud (ML Workshop 2010)
Anil Madhavapeddy
?
An Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellAn Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using Haskell
Michel Rijnders
?
Introduction to haskell
Introduction to haskellIntroduction to haskell
Introduction to haskell
Luca Molteni
?
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
Hiroki Mizuno
?
OCaml Labs introduction at OCaml Consortium 2012
OCaml Labs introduction at OCaml Consortium 2012OCaml Labs introduction at OCaml Consortium 2012
OCaml Labs introduction at OCaml Consortium 2012
Anil Madhavapeddy
?

Similar to Lispmeetup11 (6)

2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
nukaemon
?
シェルスクリフ?トを极める
シェルスクリフ?トを极めるシェルスクリフ?トを极める
シェルスクリフ?トを极める
bsdhack
?
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
?
2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる
airtoxin Ishii
?
ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?
Toru Tamaki
?
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
Insight Technology, Inc.
?
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
nukaemon
?
シェルスクリフ?トを极める
シェルスクリフ?トを极めるシェルスクリフ?トを极める
シェルスクリフ?トを极める
bsdhack
?
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
?
2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる
airtoxin Ishii
?
ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?
Toru Tamaki
?
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
Insight Technology, Inc.
?

Lispmeetup11