PatternRule(パターンルール)


POINT [.] File 数が増えるような巨大な Project で利用する [.] 明示的に指定するのは無理がある [.] .c -> .o といった 慣例があるおかげで Rule の生成を自動化できる DESC 拡張子から依存関係が適用される make -p で組み込み rule 表示  模様 == パターン
# obj は cpp に依存する %.obj: %.cpp
POINT
[.] 組み込み rule は Pattern Rule により記述されている
%.obj: %.cpp $(COMPILE_c) $(OUTPUT_OPTION) $< %: %.obj $(LINK.o) $^ $(LOADLIBS) -o $@
Make は target 名から上記のルールが適用できるか検索 % の部分をそのまま おきかえる # これは パターンにマッチしない # test ---> test.cpp # test ---> test.o test: main.cpp target = main # main.o はないかな ? 2. main.o はない -> main.o を作成するルールはないか ? 3. 組み込みルールがあった -> main.cpp はないかな ? 4. あった -> Depend Graph 完成 -> つまり makefile: # 1 main #main.cpp があると仮定 組み込みルールのテスト
// main.cpp # include<stdio.h> int main() { printf( "make test\n" ); return 0; }
# main.exe をつくれ # g++ main.cpp -o main make main ./main.exe



pattern


DESC
# "%" は任意の文字をあらわす # 場所は任意だが一度しか記述できない # "%" だけでも OK # main.cpp sub.cpp %.cpp # main_xxx.o mainFoo.o main%.o
TIP make が最初に rule を探すのは、pattern rule の target
%: %.cpp $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@