为什么Makefile包括毕竟:target?

时间:2012-10-04 04:46:34

标签: makefile

我一直在使用Makefile并保留一些东西sepparate我决定包含一个新的常见makefile。我遇到的问题是我的第一个makefile看起来像这样:

Filename Makefile.test

include ./Makefile.a
all: a b c
b:
    @echo "b"
c:
    @echo "c"

Filename Makefile.a

a:
    @echo "a"

当我执行我的makefile时:make -f Makefile.test我只打印出“a”并完成。

使其成功的唯一方法是将所有内容包括在下面(任何地方)all:target

这有什么原因让人觉得这个吗?

谢谢!

1 个答案:

答案 0 :(得分:10)

当你这样说时:

include ./Makefile.a

make Makefile.a只需将#include <x.h>拉入当前Makefile,就像Makefile.a在C中一样:它插入include的内容来替换a: @echo "a" all: a b c b: @echo "b" c: @echo "c" 语句并保持去。结果是make在开始弄清楚要做什么时会看到这个:

a

因此,源顺序中的第一个目标将是all,并且由于您未指定目标,因此make将使用第一个目标。这就是你的结果来源。

如果您愿意,可以明确指定make -f Makefile.test all 目标:

all

这将使用Makefile.test目标,无论它出现在Makefile中的哪个位置。

如果您正在使用GNU Make,那么您可以使用.DEFAULT_GOALinclude ./Makefile.a all: a b c b: @echo "b" c: @echo "c" .DEFAULT_GOAL := all 内指定默认目标,然后您就不必担心订单:

{{1}}

感谢Idelic提醒您。