標籤

C++ (12) Linux (6) MacOSX (4) Makefile (3) Matlab (3) Ubuntu (3) Android (2) C (1) Refactoring (1)

2011年10月11日 星期二

[Makefile] Implicit Rules

寫Makefile時最容易忘記的就是以下這些自動變數:

$@   代表Target
$?    代表該規則的所有dependencies
$<   代表該規則的第1個dependency
$^    代表整個Makefile中的所有dependencies(感覺不常用)

還有pattern variable,例如:
%.o %.c ...

用法大概如下

default: a.o b.o c.o
        g++ -o outputFile $?                # $? 就是 a.o b.o c.o

%.o: %.cpp %.h
        g++ -c $< [-o $@]                    # $< 就是 %.cpp,$@是%.o(可寫可不寫,因為default 生成的檔案就會根據%.cpp來命名)

意思就是說
當用g++編譯產生outputFile時
會先去檢查a.o b.o和c.o存不存在或是有沒有被動過
對於每個.o檔
makefile會自動去找到%.o: %.cpp %.h這條rule
所以剛剛檢查的動作
就會變成分別檢查 a.cpp a.h、b.cpp b.h和c.cpp c.h
如果相對應的檔案有被更動過的話
則.o檔則會被重新編譯
等到a.o b.o c.o都被檢查過(或被重新編譯過後)
就輪到 g++ -o outputFile $? 了

沒有留言:

張貼留言