在子目录Makefile中创建、继承规则

6
我希望在我的项目目录中建立一个Makefile系统,以便在其他目录中定义的规则也可以在其中定义。例如,假设我有一个名为“test”的目录,里面有“test.c”,但我想使用根目录中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 $@ $^

#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中都定义相同的规则。
2个回答

8

2
您可以将一个Makefile包含到另一个Makefile中。

我对此的问题在于Makefile会变得依赖路径。虽然它能够工作,但如果规则能够以某种方式传递给子Make,则会更好。 - Mike
1
@Mike:通常会将非路径相关的部分(例如您的%.o: %.c规则)分离出来,以便可以包含它们。使用make存在问题,这就是为什么有这么多不同的替代品的原因。 - Roger Pate
2
@Mike:你可能会发现《递归式Make的危害》(http://miller.emu.id.au/pmiller/books/rmch/)很有用。 - Roger Pate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接