2010-03-06 85 views
4

我想在我的項目目錄中設置一個Makefiles系統,以便在其中定義的規則將在其他目錄中定義。比方說,比如我有稱爲目錄「測試」和裏面「test.c的」,但我想用在根目錄Make,繼承子目錄Makefile中的規則

在這裏,在Makefile中定義的規則建立test.c的是一個例子

#Makefile (inside base dir) 
%.o: %.c 
    gcc -Wall -c $^ 

all: 
    make -C test out.a 

#test/Makefile 
out.a: test.o 
    ar rcs [email protected] $^ 

#test/test.c 
int main() { 
    return 0; 
} 

#inside root dir 
$make 
make -C test 
make[1]: Entering directory `test' 
cc -c -o test.o test.c 
/usr/ucb/cc: language optional software package not installed 
make[1]: *** [test.o] Error 1 
make[1]: Leaving directory `test' 
make: *** [all] Error 2 

注意它是如何調用cc而不是使用根makefile中定義的gcc的規則。

總之,我不希望有來定義每個Makefile中

回答

1

您可以將include一個makefile轉換爲另一個。

+0

我遇到的問題是Makefile變得與路徑有關。它可以工作,但是如果規則以某種方式傳遞給孩子,似乎會更好。Make – Mike 2010-03-06 22:52:16

+1

@Mike:分離出非路徑依賴的部分很常見,比如你的'%.o:%.c'規則,所以他們可以被包括在內。使用make有問題,這就是爲什麼有這麼多不同的選擇。 – 2010-03-06 22:53:13

+2

@Mike:您可能會發現*遞歸考慮有害*(http://miller.emu.id.au/pmiller/books/rmch/)有用。 – 2010-03-06 23:02:21