Last Update: "2010/04/16 08:27:05 makoto"
組込変数
参考:
http://www.ecoop.net/coop/translated/GNUMake3.77/make_10.jp.html#SEC97
自動変数とも言います。
| | gmake | bmake | (new name) |
$@ | 目的譜名 | ○ | ○ | .TARGET |
$% | 目的が保存形式の構成譜(archive member) だった時の目的構成名 | | | .MEMBER |
$< | 最初の依存譜名 | ○ | ○ | .IMPSRC |
$? | 目的より新しい全ての依存する譜名 | | ○ | .OODATE |
$^ | 全ての依存する譜名 | | | |
$> | | | ○ | .ALLSRC |
$+ | $^ と良く似ているが、Makefile に登場する順に並んだ譜名 | | | |
$* | 目的名から接尾辞を除いた名前 | ○ | ○ | .PREFIX |
$! | | | ○ | .ARCHIVE |
ここで、「接尾辞」とあるが、例えば .pdf .ps を接尾辞に (として取除いて欲しいので)
追加するには、
.SUFFIXES: .pdf .ps
と書いておく必要がある。
これの既定値が何か見たいと思ったら、 Makefile の中に
test:
@echo ${.SUFFIXES}
と書いて make test とすれば、(たくさん)表示してくれる。
例えば、このような感じ
.a .o .ln .s .S .c .cc .cpp .cxx .C .f .F .r .p .l .y .sh
なお、上の @ を省略すると、同じことを二回表示する。
上の表について、 BSD make の時に、どこに説明があるか、というと
man make
した時に、
Variable classes の項目の中に、 .ALLSRC とか .PREFIX とかの説明があって、
その中に、例えば、
also known as ‘>’
のように、秘かに書いてあり、なおかつ、後方互換性のために残してあるので、推奨されない、の説明がある
接尾辞規則
(Suffix Rules)
接尾辞規則: *.c -> *.o
.SUFFIXES: .o .c
The default rule for generating anyfile.o from anyfile.c is written as
.c.o:
$(CC) $(CFLAGS) -c $<
.c.o:
cc -c $<
というのは古い方法だそうだ:
http://theory.uwinnipeg.ca/localfiles/infofiles/make/make_103.html
Pattern Rules
最近はその代りに pattern rules を使う:
http://www.rzg.mpg.de/~dpc/gmake/make_93.html
Substitution References
TARGETS = $(HOST:%=%.t)
SRC = hoge.s bar.s
OBJS = $(SRC:%.s=%.o)
これで OBJS には hoge.o, bar.o が代入される。参照:
http://www.rzg.mpg.de/~dpc/gmake/make_toc.html#SEC59
- 12 Features of GNU make
-
http://www.gnu.org/software/make/manual/html_node/Features.html
- 13 Incompatibilities and Missing Features
-
http://www.gnu.org/software/make/manual/html_node/Missing.html
- 2007/09/16 の日記
-
http://www.ki.nu/~makoto/diary/2007/09/16/
上の日記の続きで、hoge:: と書くのと hoge: と書くのには実は大きな違いがある。
hoge:: は一時譜で、なくても作ってくれ、使い終れば消してくれる。
hoge: はそれがないと始まらない。そこで、大雑把に言えば、Pattern rule の時には、
一時的に必要なものには :: を使っておいた方が安全である。
|