make,继承子目录Makefile中的规则

发布于 2024-08-23 16:39:15 字数 672 浏览 3 评论 0原文

我想在我的项目目录中建立一个 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 中定义相同的规则

I want to set up a system of Makefiles in my project directories so that the rules defined in one will be defined in others. Let's say for example I have a directory called "test" and inside is "test.c" but I want to build test.c using a rule defined in a Makefile in the root directory

Here is an example

#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

Notice how it invokes cc instead of my rule using gcc defined in the root makefile.

In summary, I don't want to have to define the same rule in each Makefile

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

捂风挽笑 2024-08-30 16:39:15

对于 Microsoft nmake,使用此:(

!INCLUDE ..\makefile.defs

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

对于 Gnu make,使用此:

include ../makefile.defs

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

For Microsoft nmake, use this:

!INCLUDE ..\makefile.defs

(assumes makefile.defs in parent dir contains the base rules)

For Gnu make, use this:

include ../makefile.defs

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

稍尽春風 2024-08-30 16:39:15

您可以一个makefile 包含到另一个makefile 中。

You can include one makefile into another.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文