Makefile:模式规则作为第一条规则

问题描述 投票:0回答:1

我知道make通常在没有任何参数的情况下执行第一个目标。但是,如果第一个目标是模式规则会发生什么?我这里有一个Makefile,如下所示:

%.o: %.cc
        gcc -c -o $@ $<
main: main.o helper.o
        gcc main.o helper.o -o $@

根据我对make的理解,在没有任何参数的情况下调用它应该可能导致某种错误,因为第一个目标,据我所知,总是默认目标,如果make不是没有意义给出任何论据。但是当我用这个Makefile调用make时,它会构建main目标(当然,还会递归地指向目标main.ohelper.o)。那么,在寻找第一个目标时,make是否会忽略模式规则?并且它是否被认为是一种糟糕的风格,将那些放在目标前面的人真的想成为默认的?在我看来,这有点令人困惑。

makefile gnu-make
1个回答
1
投票

来自GNU make manual

规则的顺序并不重要,除了确定默认目标:make要考虑的目标,如果没有另外指定。默认目标是第一个makefile中第一个规则的目标。如果第一个规则具有多个目标,则仅将第一个目标作为默认目标。有两个例外:以句点开头的目标不是默认值,除非它包含一个或多个斜杠,'/';并且,定义模式规则的目标对默认目标没有影响。 (请参阅定义和重新定义模式规则。)

© www.soinside.com 2019 - 2024. All rights reserved.