What is in all in a Makefile?

  • Thread starter Eus
  • Start date
  • #1
Eus
94
0

Main Question or Discussion Point

What is "::" in "all::" in a Makefile?

Hi Ho!

Executing GNU Make:

If Makefile only contains the following lines,

Code:
all:
	echo $@
it will produce

Code:
echo all
all
If Makefile only contains the following lines,

Code:
all::
	echo $@
it will still produce

Code:
echo all
all
But, if Makefile only contains the following lines,

Code:
all:::
	echo $@
it will produce

Code:
Makefile:1: *** missing target pattern.  Stop.
all: is just the usual way. all::: is an error.
all:: is the mystery that I don't know.

I know, all:| exists for order-only execution.
But, all:: is not documented in GNU Make texinfo.

Does any of you know what the use of all:: is?

Thank you.

Best regards,
Eus
 

Answers and Replies

  • #2
mgb_phys
Science Advisor
Homework Helper
7,774
12
I think it is being intepreted as "all:" followed by an empty target "blank:"
but "all:::" would have 2 targets "blank:" targets the same.
 
  • #3
D H
Staff Emeritus
Science Advisor
Insights Author
15,393
683
all: is an ordinary (i.e., single-colon) rule. You can have only one 'all:' rule in a makefile (exception: you can have multiple dependency-only rules for the same target). all:: is a double-colon rule. You can have as many of these as you want in a makefile, but you cannot mix ordinary and double-colon rules.

'man make' doesn't say much. Use 'info make' instead. This is the make.info section on double-colon rules (type 'info make double-colon' on the UNIX command line):
info make double-colon said:
Double-Colon Rules

"Double-colon" rules are rules written with `::' instead of `:'
after the target names. They are handled differently from ordinary
rules when the same target appears in more than one rule.

When a target appears in multiple rules, all the rules must be the
same type: all ordinary, or all double-colon. If they are
double-colon, each of them is independent of the others. Each
double-colon rule's commands are executed if the target is older than
any prerequisites of that rule. If there are no prerequisites for that
rule, its commands are always executed (even if the target already
exists). This can result in executing none, any, or all of the
double-colon rules.

Double-colon rules with the same target are in fact completely
separate from one another. Each double-colon rule is processed
individually, just as rules with different targets are processed.

The double-colon rules for a target are executed in the order they
appear in the makefile. However, the cases where double-colon rules
really make sense are those where the order of executing the commands
would not matter.

Double-colon rules are somewhat obscure and not often very useful;
they provide a mechanism for cases in which the method used to update a
target differs depending on which prerequisite files caused the update,
and such cases are rare.

Each double-colon rule should specify commands; if it does not, an
implicit rule will be used if one applies. *Note Using Implicit Rules:
Implicit Rules.
 
Last edited:
  • #4
Eus
94
0
'man make' doesn't say much. Use 'info make' instead. This is the make.info section on double-colon rules (type 'info make double-colon' on the UNIX command line):
Yes, you are right! Thank you very much for telling me that it is called double-colon rule and it is documented in the texinfo file.

Best regards,
Eus
 

Related Threads on What is in all in a Makefile?

Replies
2
Views
6K
Replies
9
Views
2K
  • Last Post
Replies
4
Views
775
  • Last Post
2
Replies
34
Views
2K
  • Last Post
Replies
3
Views
5K
  • Last Post
Replies
1
Views
2K
Replies
12
Views
619
Replies
4
Views
7K
Replies
1
Views
3K
Top