make
  url
  info
  if
組込変数
    接尾辞規則
    Pattern Rules
    Substitution References

Last Update: "2010/04/16 08:27:05 makoto"

組込変数

参考: http://www.ecoop.net/coop/translated/GNUMake3.77/make_10.jp.html#SEC97

自動変数とも言います。

gmakebmake (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 の時には、 一時的に必要なものには :: を使っておいた方が安全である。
Last Update: Thu, 06 Jul 2023 18:21:29 GMT 1.66 2008/03/08