0

我一直在使用 Makefile 并且为了将一些东西分开,我决定包含一个新的通用 makefile。我面临的问题是我的第一个 makefile 看起来像这样:

文件名 Makefile.test

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

文件名 Makefile.a

a:
    @echo "a"

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

使其工作的唯一方法是将包含波纹管(任何地方)放在所有:目标

这样做有什么原因吗?

谢谢!

4

1 回答 1

10

当你这样说时:

include ./Makefile.a

make 只是以与 CMakefile.a中相同的方式拉入当前 Makefile #include <x.h>:它插入内容Makefile.a以替换include语句并继续执行。结果是,当它开始弄清楚要做什么时,make 看到了这一点:

a:
    @echo "a"
all: a b c
b:
    @echo "b"
c:
    @echo "c"

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

如果需要,您可以显式指定all目标:

make -f Makefile.test all

all无论它出现在 Makefile 中的什么位置,它都会使用目标。

如果您使用的是 GNU Make,那么您可以使用.DEFAULT_GOAL在内部指定一个默认目标Makefile.test,然后您就不必担心顺序:

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

.DEFAULT_GOAL := all

感谢Idelic 对此的提醒。

于 2012-10-04T05:06:07.110 回答