2012年3月26日月曜日

Makeの暗黙のルール

意外と把握していないことシリーズ。手元のGNU Make 3.81の暗黙のルールを調べてみた。以下、主なルールを抜粋。COMPILE.cとかはその定義で置き換えているので、再定義したら下のルールも変わる。
C, C++のコンパイル
%.o: %.c$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
%.o: %.cc$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
%.o: %.C$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
%.o: %.cpp$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
リンク
%: %.o$(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
C, C++ソースから実行バイナリまで一気通貫
%: %.c$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
%: %.cc$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
%: %.C$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
%: %.cpp$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@
おまけ1
%.ln: %.c$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -C$* $<
おまけ2
%.p: %.web$(TANGLE) $<
%.tex: %.web$(WEAVE) $<
%.c: %.w$(CTANGLE) $< - $@
%.tex: %.w$(CWEAVE) $< - $@
lintチェック用のルールがあることと、WWWじゃないKnuth先生のWEBのルールがあることは、知らなかった。
ちなみに、これらのルールで使用するデフォルトのツールは以下の通り。

CC = cc
CXX = g++
LINT = lint
TANGLE = tangle
WEAVE = weave
CTANGLE = ctangle
CWEAVE = cweave

0 件のコメント:

コメントを投稿