Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile:模式规则作为第一个规则_Makefile_Gnu Make - Fatal编程技术网

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

Makefile:模式规则作为第一个规则,makefile,gnu-make,Makefile,Gnu Make,我知道make如果在没有任何参数的情况下调用,通常会执行第一个目标。但是如果第一个目标是模式规则,会发生什么呢?我这里有一个Makefile,如下所示: %.o: %.cc gcc -c -o $@ $< main: main.o helper.o gcc main.o helper.o -o $@ %.o:%.cc gcc-c-o$@$< main:main.o helper.o gcc main.o helper.o-o$@ 根据我对make的理解,

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

%.o: %.cc
        gcc -c -o $@ $<
main: main.o helper.o
        gcc main.o helper.o -o $@
%.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
是否总是会忽略模式规则?而且,把那些人放在目标人的前面,真的想成为默认的人,这被认为是不好的风格吗?在我看来,这有点令人困惑。

来自:

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


在我看来,这有点让人困惑
您可以使用
.DEFAULT\u GOAL:=target\u name
来明确设置默认规则。