Reputation: 42463
Most Linux apps are compiled with:
make
make install clean
As I understand it, the make
command takes names of build targets as arguments. So for example install
is usually a target that copies some files to standard locations, and clean
is a target that removes temporary files.
But what target will make
build if no arguments are specified (e.g. the first command in my example)?
Upvotes: 295
Views: 229126
Reputation: 9117
bmake's equivalent of GNU Make's .DEFAULT_GOAL
is .MAIN
:
$ cat Makefile
.MAIN: foo
all:
@echo all
foo:
@echo foo
$ bmake
foo
See the bmake(1) manual page.
Upvotes: 1
Reputation: 1132
GNU Make also allows you to specify the default make target using a special variable called .DEFAULT_GOAL
. You can even unset this variable in the middle of the Makefile, causing the next target in the file to become the default target.
Ref: The Gnu Make manual - Special Variables
Upvotes: 48
Reputation:
By default, it begins by processing the first target that does not begin with a .
aka the default goal; to do that, it may have to process other targets - specifically, ones the first target depends on.
The GNU Make Manual covers all this stuff, and is a surprisingly easy and informative read.
Upvotes: 333
Reputation: 8895
To save others a few seconds, and to save them from having to read the manual, here's the short answer. Add this to the top of your make file:
.DEFAULT_GOAL := mytarget
mytarget will now be the target that is run if "make" is executed and no target is specified.
If you have an older version of make (<= 3.80), this won't work. If this is the case, then you can do what anon mentions, simply add this to the top of your make file:
.PHONY: default
default: mytarget ;
References: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html
Upvotes: 330