Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does "make" app know default target to build if no target is specified?

Tags:

makefile

People also ask

Which target is the default one to execute if no target name is provided to the make command?

The default goal of make is the first target whose name does not start with '.

What happens if you run make with no arguments?

Specifies the number of jobs (commands) to run simultaneously. With no argument, make runs as many jobs simultaneously as possible. If there is more than one `-j' option, the last one is effective. See section Parallel Execution, for more information on how commands are run.

What command is used to call the default target in a makefile?

You can manage the selection of the default goal from within your makefile using the . DEFAULT_GOAL variable (see Other Special Variables).

What will not happen if u run the make command without parameters?

If the -j option is given without an argument, make will not limit the number of jobs that can run simultaneously. Continue as much as possible after an error. While the target that failed (and those that depend on it) cannot be remade, the other dependencies of these targets can be processed all the same.


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.


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


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


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.