首页 > 解决方案 > Makefile:模式规则作为第一规则

问题描述

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

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

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

标签: makefilegnu-make

解决方案


来自GNU make 手册

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


推荐阅读