Reputation: 159
I know that make
usually executes the first target if called without any arguments. But what happens if the first target is a pattern rule? I have a Makefile here that looks as follows:
%.o: %.cc
gcc -c -o $@ $<
main: main.o helper.o
gcc main.o helper.o -o $@
From my understanding of make
, just calling it w/o any arguments should probably lead to some kind of error in this case because the first target, which is as far as I understood always the default target, does not make sense if make
is not given any arguments. But when I call make
with this Makefile, it instead builds the main
target (and, of course, recursively the targets main.o
and helper.o
as well).
So, is it always true that make
will ignore the pattern rules when looking for the first target? And is it somehow considered bad style to put those in front of the target that one really wants to be the default one? In my opinion, this is somehow confusing.
Upvotes: 1
Views: 687
Reputation: 28945
From the GNU make manual:
The order of rules is not significant, except for determining the default goal: the target for make to consider, if you do not otherwise specify one. The default goal is the target of the first rule in the first makefile. If the first rule has multiple targets, only the first target is taken as the default. There are two exceptions: a target starting with a period is not a default unless it contains one or more slashes, ‘/’, as well; and, a target that defines a pattern rule has no effect on the default goal. (See Defining and Redefining Pattern Rules.)
Upvotes: 1