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

时间:2019-02-20 14:46:12

标签: makefile gnu-make

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

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

根据我对make的理解,在这种情况下仅调用w / o不带任何参数都可能会导致某种错误,因为据我所知,第一个目标(始终是默认目标)确实会如果make没有给出任何参数,则没有意义。但是,当我使用此Makefile调用make时,它会构建main目标(当然,还要递归地建立目标main.ohelper.o)。 那么,make在寻找第一个目标时会忽略模式规则是否总是正确?并以某种方式将那些真正想要成为默认目标的目标放在目标前面是否被认为是不好的风格?我认为这有点令人困惑。

1 个答案:

答案 0 :(得分:1)

来自GNU make manual

  

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