我想在我的項目目錄中設置一個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中
我遇到的問題是Makefile變得與路徑有關。它可以工作,但是如果規則以某種方式傳遞給孩子,似乎會更好。Make – Mike 2010-03-06 22:52:16
@Mike:分離出非路徑依賴的部分很常見,比如你的'%.o:%.c'規則,所以他們可以被包括在內。使用make有問題,這就是爲什麼有這麼多不同的選擇。 – 2010-03-06 22:53:13
@Mike:您可能會發現*遞歸考慮有害*(http://miller.emu.id.au/pmiller/books/rmch/)有用。 – 2010-03-06 23:02:21