我知道make
通常在没有任何参数的情况下执行第一个目标。但是,如果第一个目标是模式规则会发生什么?我这里有一个Makefile,如下所示:
%.o: %.cc
gcc -c -o $@ $<
main: main.o helper.o
gcc main.o helper.o -o $@
根据我对make
的理解,在没有任何参数的情况下调用它应该可能导致某种错误,因为第一个目标,据我所知,总是默认目标,如果make
不是没有意义给出任何论据。但是当我用这个Makefile调用make
时,它会构建main
目标(当然,还会递归地指向目标main.o
和helper.o
)。那么,在寻找第一个目标时,make
是否会忽略模式规则?并且它是否被认为是一种糟糕的风格,将那些放在目标前面的人真的想成为默认的?在我看来,这有点令人困惑。
规则的顺序并不重要,除了确定默认目标:make要考虑的目标,如果没有另外指定。默认目标是第一个makefile中第一个规则的目标。如果第一个规则具有多个目标,则仅将第一个目标作为默认目标。有两个例外:以句点开头的目标不是默认值,除非它包含一个或多个斜杠,'/';并且,定义模式规则的目标对默认目标没有影响。 (请参阅定义和重新定义模式规则。)