【问题标题】:Make, inherit rules in subdirectory MakefileMake,继承子目录Makefile中的规则
【发布时间】:2010-03-06 22:44:32
【问题描述】:

我想在我的项目目录中建立一个 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

注意它是如何使用根 makefile 中定义的 gcc 调用 cc 而不是我的规则的。

总而言之,我不想在每个 Makefile 中定义相同的规则

【问题讨论】:

    标签: inheritance makefile


    【解决方案1】:

    对于 Microsoft nmake,请使用:

    !INCLUDE ..\makefile.defs
    

    (假设父目录中的 makefile.defs 包含基本规则)

    对于 Gnu make,使用这个:

    include ../makefile.defs
    

    http://www.gnu.org/software/automake/manual/make/Include.html

    【讨论】:

      【解决方案2】:

      您可以将include 一个makefile 转换为另一个。

      【讨论】:

      • 我遇到的问题是 Makefile 变得依赖于路径。它有效,但如果以某种方式将规则传递给子 Make 似乎会更好
      • @Mike:分离不依赖路径的部分是很常见的,比如你的%.o: %.c 规则,因此可以包含它们。使用 make 存在问题,这就是为什么有这么多不同的选择。
      • @Mike:您可能会发现 Recursive Make Considered Harmful (miller.emu.id.au/pmiller/books/rmch) 很有用。
      猜你喜欢
      • 2012-09-24
      • 2012-04-13
      • 2014-01-23
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2012-09-30
      相关资源
      最近更新 更多